Docker在通过SSH连接时运行X应用程序

问题描述 投票:2回答:1

我已经使用Running Gui Apps with Docker的这些指令来创建允许我启动基于GUI的应用程序的图像。

在同一台机器上运行Docker时,它完美无缺,但在远程主机上运行时它会停止工作。

在当地,我可以跑

docker --rm --ti -e DISPLAY -e <X tmp> <image_name> xclock

我可以在我的主机上运行xclock

当使用XForwarding远程连接到主机时,我能够运行出现在我本地X服务器上的X应用程序,正如任何人所期望的那样。

但是,如果在远程主机中我尝试运行上面的docker命令,它无法连接到DISPLAY(通常是localhost:10.0

我认为问题是XForwarding是在远程主机的localhost接口上设置的。因此,docker主机无法连接到DISPLAY=localhost:10.0,因为localhost意味着远程主机,无法从docker本身访问。

有谁能建议一个优雅的方法来解决这个问题?

关心亚历山德罗

EDIT1:我猜的一种可能的方法是使用socat将远程/tmp/.X11-unix转发到本地机器。这样我就不需要使用端口转发了。看起来openssh 6.7本身也支持unix套接字转发。

ssh docker xserver
1个回答
1
投票

通过SSH(ssh -X)运行X应用程序时,您没有使用/tmp/.X11-unix套接字与X服务器通信。您宁愿通过“localhost:10.0”通过SSH访问隧道。

为了使其工作,您需要通过设置确保SSH服务器支持与外部地址的X连接

X11UseLocalhost no

在/ etc / ssh / sshd_config中。

然后容器内的$ DISPLAY应设置为docker接口上Docker主机的IP地址 - 通常为172.17.0.1。所以$ DISPLAY将是172.17.0.1:10

您需要使用“xauth add”在docker容器中添加X身份验证令牌(请参阅here

如果Docker主机上有任何防火墙,则必须打开与此隧道相关的TCP端口。通常你必须运行类似的东西

ufw allow from 172.17.0.0/16 to any port $TCPPORT proto tcp

如果你使用ufw。

然后它应该工作。我希望它有所帮助。有关更多详细信息,请参阅我在https://stackoverflow.com/a/48235281/5744809的其他答案。

© www.soinside.com 2019 - 2024. All rights reserved.