X11 从远程服务器中的 docker 容器转发

ott*_*erb 19 ssh x11 docker

我想通过 ssh 进入我的 linux mint 18 服务器(运行 X11)并登录到 docker 容器并将 iPython matplotlib 图转发到本地客户端(也是 mint)。都在局域网内。

我发现的最接近的问题是:https : //stackoverflow.com/questions/25281992/alternatives-to-ssh-x11-forwarding-for-docker-containers

在此之后,我可以-e DISPLAY=$DISPLAY通过传递给docker run命令的选项从 docker 获取绘图 GUI 到本地机器的显示器(即 mint 服务器)。我还可以通过 ssh-X选项连接到服务器以获取xeyes客户端的窗口。

但是,如果我使用-X选项SSH 进入服务器并登录到使用 运行的容器-DISPLAY=localhost or client IP,我仍然无法获得客户端计算机的绘图。

我知道我可以使用 VNC 来解决它。但是,如何正确使用 X11 转发来做到这一点?

Rub*_*ben 14

您需要解决这些问题才能使其正常工作:

  1. X 应用程序可以找到 X 服务器
    • 对于 SSH,需要有一个隧道(/etc/ssh/sshd_config 中的“ssh -X”和“X11Forwarding yes”)
    • 地址必须在 $DISPLAY 中(使用 -e)。您必须将“localhost”替换为从 Docker 容器看到的 Docker 主机的实际 IP 地址。
  2. X 应用程序被授权与 X 服务器通信
    • 将 xauth 魔法 cookie 传播到 Docker 容器中
    • 为 X11 端口打开从 Docker 主机到 Docker 容器的任何防火墙端口
    • 确保 SSH 服务器配置为接受远程 IP 上的 X11 TCP 连接。

有关如何完成的详细信息,请参阅 StackOverflow 上的我的问题(和答案):https : //stackoverflow.com/questions/48235040/run-x11-application-in-a-docker-container-reliably-on-a -server-connected-via-ssh


小智 8

要在远程 docker 容器中运行 GUI 应用程序,您不需要从服务器进行 X11 转发。\n您可以让X11服务器监听TCP:6000,并使用 运行远程docker容器-e DISPLAY=$IP:0,其中$IP是运行X11服务器的计算机的IP地址。

\n\n

我已经使用 XQuarz 在 macbook 上运行它,以在远程 ubuntu 上显示远程 docker 容器:

\n\n\n\n
docker run -it --rm -e DISPLAY=$macbook_ip:0 fr3nd/xeyes\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后 macbook 上显示 xeyes

\n