首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker在通过SSH连接时运行X应用程序

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

Stack Overflow用户
提问于 2015-11-15 13:49:45
回答 1查看 1.3K关注 0票数 2

我使用了用Docker运行Gui应用程序的这些说明来创建图像,使我能够启动基于GUI的应用程序。

当在同一台计算机上运行Docker时,所有这些操作都完美无缺,但在远程主机上运行它时,它将停止工作。

在本地,我可以跑

代码语言:javascript
复制
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转发。

EN

回答 1

Stack Overflow用户

发布于 2018-01-18 14:49:29

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

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

代码语言:javascript
复制
X11UseLocalhost no

/etc/ssh/sshd_config.中

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

您需要使用"xauth“在docker容器中添加X身份验证令牌(请参阅这里)

如果Docker主机上有防火墙,则必须打开与此隧道相关的TCP端口。通常情况下,您将不得不运行类似于

代码语言:javascript
复制
ufw allow from 172.17.0.0/16 to any port $TCPPORT proto tcp

如果你使用ufw

那就应该管用了。希望能帮上忙。还请参阅我在这里的另一个答案,https://stackoverflow.com/a/48235281/5744809,以获得更多细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33720436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档