【问题标题】:X11 forwarding of GUI app in Docker containerDocker 容器中 GUI 应用的 X11 转发
【发布时间】:2017-06-30 03:00:13
【问题描述】:

我目前正在尝试在 docker 容器中运行一些 GUI 应用程序。我一直在尝试jessie frazelle github 的那些。但是我可以构建图像(或从 docker hub 获取)并运行它们而不会出现任何明显的错误,但是,窗口不显示(我看不到应用程序)。

我在 Ubuntu 16.04 上运行 Docker 版本 1.13.1

图像创建自:

FROM debian:stretch
MAINTAINER Jessie Frazelle <jess@linux.com>

RUN apt-get update && apt-get install -y \
    libreoffice \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT [ "libreoffice" ]

我使用的运行命令如下:

docker run -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/localtime:/etc/localtime \
    -e DISPLAY=unix$DISPLAY 
    -v $HOME/Documents:/root/Documents \
    -e GDK_SCALE \
    -e GDK_DPI_SCALE \
    --name libreoffice \
    jess/libreoffice

查了很多资料,发现上面的应该可以了,而且大部分人都说run命令中需要以下几行,

    -v /tmp/.X11-unix:/tmp/.X11-unix
    -e DISPLAY=unix$DISPLAY

但我仍然无法显示窗口。

  1. 我怎样才能让它工作?
  2. 我从根本上缺少什么?

任何帮助将不胜感激。

【问题讨论】:

  • 这有一些很好的信息:fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker。您可能需要弄乱用户映射。
  • 你试过-e DISPLAY=$DISPLAY吗?容器执行libreoffice时是否有任何错误?
  • 另外,您是在拥有 X 显示器的同一主机上运行容器,还是从远程主机运行容器?
  • @johnharris85 - 感谢资源,我会好好阅读。
  • @Alvaro Carvajal - 是的,我试过这条线,但我收到一条错误消息,说没有可用的显示器。我目前正在我的本地机器上尝试它,但是一旦我得到这个工作就想尝试远程。本地与远程之间的设置是否存在差异。

标签: linux docker containers dockerfile x11-forwarding


【解决方案1】:

为了能够与 X 服务器通信,必须允许运行应用程序的用户与 X 服务器通信。所以我认为你有两个选择:

  1. 允许容器中的用户连接到 X 服务器。如果您的应用在容器内以用户 root 运行,您可以使用:

    $ xhost +SI:localuser:root

(我不知道这对安全性的影响,但 root 应该能够以任何一种方式连接......)

  1. 在与您的用户会话匹配的容器中添加用户。如果您在主机系统中使用的用户的 UID = 1000,您可以在容器内创建一个虚拟用户:

    $ useradd -u 1000 my_user

然后使用该用户在容器内运行您的应用。这不需要对接受的主机进行任何更改(因为用户 1000 已经能够连接)。

看这两个选项,第二个似乎更好,因为它不需要对宿主系统做任何改变,而且如果你需要在主用户无法匹配UID=1000的其他系统中使用这个容器,你可以使容器从环境变量接收正确的 uid,然后设置正确的用户(useradd + chown 程序文件)。

【讨论】:

  • 我试过了,它成功了,所以至少我知道容器已设置并正确运行。我已经读到这种方法不安全,所以会阅读上面@johnharris85 和其他人发布的链接,以尝试找到更安全的方法。
  • @DavidBrough 是的,允许一切都有点不安全,但我们的想法是检查这是否阻止了连接。我已经用其他替代方法编辑了回复。祝你好运
  • +1 我们处理的一些机器以其他方式完全锁定(仅通过适当的密钥和隧道进行 ssh 访问),因此无需担心安全羞耻的开发人员想要这样做开发环境。
猜你喜欢
  • 2017-09-22
  • 2017-11-09
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多