我使用了用Docker运行Gui应用程序的这些说明来创建图像,使我能够启动基于GUI的应用程序。
当在同一台计算机上运行Docker时,所有这些操作都完美无缺,但在远程主机上运行它时,它将停止工作。
在本地,我可以跑
docker --rm --ti -e DISPLAY -e <X tmp> <image_name> xclock我可以让xclock在我的主机上运行。
当使用XForwarding远程连接到主机时,我能够运行X应用程序,这些应用程序显示在我的本地X上,这是任何人都会预料到的。
但是,如果在远程主机上运行上述docker命令,它将无法连接到DISPLAY (通常是localhost:10.0)。
我认为问题在于XForwarding是在远程主机的本地主机接口上设置的。因此,对接主机无法连接到DISPLAY=localhost:10.0,因为该本地主机意味着远程主机,无法从坞本身到达。
有人能提出一个优雅的方法来解决这个问题吗?
问候阿莱桑德罗
EDIT1:我猜一种可能的方法是使用socat将远程/tmp/.X11-unix转发到本地机器。这样我就不需要使用端口转发了。看起来,openssh 6.7将本机支持unix转发。
发布于 2018-01-18 14:49:29
通过SSH (ssh -X)运行X应用程序时,不使用/tmp/.X11-unix套接字与X服务器通信。您宁愿使用通过"localhost:10.0“到达的SSH的隧道。
为了使其工作,需要通过设置SSH服务器支持到外部地址的X连接
X11UseLocalhost no在/etc/ssh/sshd_config.中
然后容器内的$DISPLAY应该设置为码头接口上的Docker主机的IP地址-通常是172.17.0.1。所以$DISPLAY是172.17.0.1:10
您需要使用"xauth“在docker容器中添加X身份验证令牌(请参阅这里)
如果Docker主机上有防火墙,则必须打开与此隧道相关的TCP端口。通常情况下,您将不得不运行类似于
ufw allow from 172.17.0.0/16 to any port $TCPPORT proto tcp如果你使用ufw。
那就应该管用了。希望能帮上忙。还请参阅我在这里的另一个答案,https://stackoverflow.com/a/48235281/5744809,以获得更多细节。
https://stackoverflow.com/questions/33720436
复制相似问题