Могут ли два контейнера запустить Xserver на одном дисплее на одном хосте? - PullRequest
0 голосов
/ 19 апреля 2019

Я создал Dockerfile, который устанавливает Xvfb и firefox со всеми необходимыми зависимостями, и я могу создать контейнер с firefox, запущенным на DISPLAY =: 1 Xserver.

Когда я пытаюсьзапустить другой контейнер, второй контейнер не может запустить Xserver на DISPLAY =: 1.

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

Поэтому я проверил свои процессы с помощью ps aux, и я был удивлен, увидев мой X-сервер в списке на моемhost.

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

Я понимаю, что процессы докера можно увидеть на хосте, поскольку это не такВМ, но я не понимаю, почему второй контейнер также не может запустить X-сервер на DISPLAY =: 1, так как два контейнера не связаны.

Разве они не изолированы от хост-системы?Я думал, что они будут использовать свою собственную минималистскую среду.

Вот моя 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 и не важна в этой проблеме.

Итак, возможно ли запустить два разных контейнера, запустив два отдельных X-сервера на DISPLAY =: 1?

1 Ответ

0 голосов
/ 19 апреля 2019

На самом деле проблема возникла из опции --net = host.

Я удалил ее из обеих команд запуска и могу запустить два контейнера с X-сервером на display1.

Так что --net = хост не такой изолированный, как я думал, и он больше, чем просто совпадает с хостом контейнерной сети.

...