通过 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 包的问题。

参考