【问题标题】:Can two containers launch a Xserver on the same display on the same host?两个容器可以在同一主机上的同一显示器上启动 Xserver 吗?
【发布时间】:2019-04-19 09:10:13
【问题描述】:

我创建了一个 Dockerfile,它安装了 Xvfb 和 firefox 以及所需的所有依赖项,并且我能够创建一个带有在 Xserver 的 DISPLAY=:1 上启动的 firefox 的容器。

当我尝试启动另一个容器时,第二个容器无法在 DISPLAY=:1 上启动 Xserver。

sudo docker logs docker_serv2
xvfb-run: error: Xvfb failed to start
No protocol specified

所以我用ps aux 检查了我的进程,我很惊讶地看到我的 X 服务器列在我的主机上。

xxx 11343  1.9  0.6 240260 47620 ?        Sl   08:41   0:12 Xvfb :1 -screen 0 1280x720x24 -shmem -listen tcp -nolisten tcp -auth /home/xxx/.Xauthority
xxx 11350 18.7  4.2 2238084 326600 ?      Sl   08:41   2:07 /usr/lib/firefox/firefox

我使用这个命令在两个容器上创建 Xserver 并启动 firefox:

xvfb-run -n 1 -f ~/.Xauthority --server-args='-screen 0 1280x720x24 -shmem -listen tcp' firefox

我知道可以在主机上看到 docker 进程,因为它不是 VM,但我不明白为什么第二个容器也无法在 DISPLAY=:1 上启动 X 服务器,因为这两个容器是没有链接。

它们不是与主机系统隔离的吗?我以为他们会使用自己的极简主义环境。

这是我的run.sh 命令:

docker run -d --rm \
--net=host \
-v /dev/uinput:/dev/uinput \
-v /dev/input:/dev/input \
-v /run/udev:/run/udev \
--name docker firefox

首先我认为--net=host 可能是我的问题的根源,但它只会影响网络配置,如果没有选项,我也会遇到同样的问题。

其他 -v 选项在这里是因为我也在玩一些 /dev/input 指令,在这个问题上并不重要。

那么,是否可以在 DISPLAY=:1 上启动两个不同的容器来启动两个单独的 X 服务器?

【问题讨论】:

    标签: linux docker process xvfb


    【解决方案1】:

    实际上问题来自 --net=host 选项。

    我从两个运行命令中删除了它,我可以在 display1 上使用 X 服务器启动两个容器。

    所以 --net=host 并没有我想象的那么孤立,它不仅仅匹配容器网络主机。

    【讨论】:

    • --net host 关闭 Docker 的网络隔离。实际需要它应该是非常不寻常的。
    • 我意识到了,只是我需要在容器启动后打开一些随机端口,所以这似乎是一个非常好的选择,因为它使用主机配置。在docker run 命令之后,我没有找到关于打开特定端口的其他解决方案。
    • 你应该尝试设置,这样你就不需要在docker run之后做任何事情;在启动时提供端口映射选项,如 docker run -p,并让容器自行设置。
    • 是的,这就是我正在做的 ;) 感谢您的帮助 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2017-07-28
    • 2020-10-25
    • 2011-06-08
    • 2017-10-02
    相关资源
    最近更新 更多