我创建了一个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服务器?
实际上问题来自--net = host选项。
我从两个运行命令中删除它,我可以在display1上启动两个带X服务器的容器。
所以--net = host并不像我想象的那么孤立,它不仅仅匹配容器网络主机。