通过 ssh x11 转发远程主机上 dingtalk 的 docker 容器到本机
2022/12/19
使用 docker 在远程服务器上运行钉钉(dingtalk),然后使用 ssh X11 转发到本机。
先决条件
- 安装有 docker,docker-compose 的 linux 服务器,这里选择 centos 7
- 安装有 linux 发行版的本机,这里选择 fedora 36
二次加工,创建自己的镜像
使用的基础镜像 fitme96/dingtalk:1.3.0.20214
docker run –name dingtalk_fitme96_temp -it fitme96/dingtalk:1.3.0.20214 bash
docker exec -it dingtalk_fitme96_temp bash
#容器中执行
apt update
apt install -y vim ssh x11-apps
# 设置 sshd
vim /etc/ssh/sshd_config
/etc/init.d/ssh start
vim ~/.bashrc
# 退出容器
/etc/ssh/sshd_config
# Run X application in a Docker container reliably on a server connected via SSH without "--net host" https://stackoverflow.com/questions/48235040/run-x-application-in-a-docker-container-reliably-on-a-server-connected-via-ssh-w/48235281#48235281
X11Forwarding yes
X11UseLocalhost no
#AcceptEnv LANG LC_*
.bashrc
export XMODIFIERS='@im=fcitx'
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
退出容器, 保存镜像
docker ps -a #查看容器id
docker commit 容器id
docker images
docker tag 镜像id 镜像tag
测试镜像
docker 宿主机安装 docker-compose
docker-compose.yml:
version: "3.3"
services:
dd:
image: ""
environment:
- DISPLAY=本机$DISPLAY:0
# https://github.com/fitme96/dingtalk-image/issues/1
- XMODIFIERS='@im=fcitx'
- QT_IM_MODULE=fcitx
- GTK_IM_MODULE=fcitx
volumes:
- /data/docker/dt_yml:/root
ports:
- "8023:22"
stdin_open: true
tty: true
command: bash
ulimits:
core:
hard: 0
soft: 0
# 启动容器
docker-compose up
# 进入容器
docker exec -it 容器id bash
# 容器中运行
/etc/init.d/ssh start
本机执行 ssh -v -X $user@ip -p 8023 xeyes
运行 dingtalk
ssh -v -X user@ip -p 8023 "/bin/sh /opt/apps/com.alibabainc.dingtalk/files/Elevator.sh"
总结
通过 docker-compose 在远程服务器上运行钉钉(dingtalk),然后使用 ssh X11 转发到本机,避免使用本机资源运行 dingtalk,节省内存。
直接使用官方提供的 deb 包,也避免了特定 linux 发行版无法安装 dingtalk deb 包的问题。
参考
- fitme96/dingtalk-image
- Run X application in a Docker container reliably on a server connected via SSH without “–net host”
- Docker X11 Client Via SSH
- X11 forwarding of a GUI app running in docker
- Running Chromium inside Docker - Gtk: cannot open display: :0
- Inside a Docker Container: “Error: cannot open display: localhost:11.0”
- How do I fix a “cannot open display” error when opening an X program after ssh’ing with X11 forwarding enabled?