【问题标题】:Docker to run X applications while connected through SSHDocker 在通过 SSH 连接时运行 X 应用程序
【发布时间】:2019-04-28 22:57:34
【问题描述】:

我已使用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 是在远程主机的本地主机接口上设置的。 所以 docker 主机无法连接到DISPLAY=localhost:10.0,因为 localhost 表示远程主机,无法从 docker 本身访问。

谁能提出一个优雅的方法来解决这个问题?

问候 亚历山德罗

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

【问题讨论】:

  • Alessandro 你找到问题的解决方案了吗?我在远程机器上面临同样的问题。在主机上我可以运行 xclock 但不能在远程机器上运行.....请帮忙!
  • 当然我是在遇到同样的问题后才发现你的问题,想出了一个解决方案,并在这里填写了完整的问答:stackoverflow.com/questions/48235040/…我希望这也许也能为你解决.

标签: ssh docker xserver


【解决方案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 了解更多详情。

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2018-06-22
    • 2022-07-08
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多