两个容器可以在同一主机的同一显示器上启动Xserver吗?

时间:2019-04-19 09:10:14

标签: linux docker process xvfb

我创建了一个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服务器?

1 个答案:

答案 0 :(得分:0)

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

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

因此--net = host并不是我所想的那样孤立,它所做的不仅仅是匹配容器网络主机。