Я слежу за этим примером того, как запустить приложение X11 в док-контейнере. Я нахожусь на Ubuntu 20.04 и использую X11:
$ echo $XDG_SESSION_TYPE
x11
Мой Dockerfile
:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y x11-apps
ARG user=hakon
ARG home=/home/$user
RUN groupadd -g 1000 $user
RUN useradd -d $home -s /bin/bash -m $user -u 1000 -g 1000 \
&& echo $user:ubuntu | chpasswd \
&& adduser $user sudo
WORKDIR $home
USER $user
ENV HOME $home
COPY entrypoint.sh .
ENTRYPOINT ["./entrypoint.sh"]
где entrypoint.sh
:
echo "DISPLAY=$DISPLAY"
xclock # <-- This is the X11 application I am testing with. It shows a clock in a Window
echo "Done."
exec bash
Я строю образ, используя:
$ docker build -t gui-test-ubuntu-2004 .
Затем запускаю контейнер с:
$ docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
-h $HOSTNAME -v $HOME/.Xauthority:/home/hakon/.Xauthority gui-test-ubuntu-2004
Вывод:
DISPLAY=:0
Error: Can't open display: :0
Done.
и окно графического интерфейса xclock
не отображается. Что мне здесь не хватает?
Скорее всего, проблема в том, что вы установили докер
с привязкой
. Согласно mviereck
, сопровождающий x11docker
snap
вызывает несколько ограничений.- hostdisplay
не работает, потому что невозможно использовать unix-сокеты с хоста, в этом случае X сокет unix в/tmp/.X11-unix
Обходной путь - сервер Xephyr X
с x11docker
. Вместо запуска docker run ... gui-test-ubuntu-2004
, используйте:
x11docker --xephyr gui-test-ubuntu-2004
Второй альтернативой является удаление установки snap
установки docker
см. этот ответ, а затем переустановите docker
с apt-get install
:
Remove docker:
sudo snap remove docker
Перейдите на https://download.docker.com/linux/ubuntu/dists/ и выберите свою версию Ubuntu, затем перейдите к pool / stable /
и загрузите 3 .deb
файлы:
containerd.io_1.2.13-2_amd64.deb
docker-ce_19.03.11_3-0_ubuntu-focal_amd64.deb
docker-ce-cli_19.03.11_3-0_ubuntu -focal_amd64.deb
Установите их в следующем порядке:
sudo apt-get install ./containerd.io_1.2.13-2_amd64.deb
sudo apt-get install ./docker-ce-cli_19.03.11_3-0_ubuntu-focal_amd64.deb
sudo apt-get install ./docker-ce_19.03.11_3-0_ubuntu-focal_amd64.deb
Добавьте своего пользователя в группу docker, чтобы избежать необходимости вводить sudo
для запуска docker
:
sudo addgroup --system docker
sudo usermod -a -G docker $ USER
Перезагрузите компьютер, чтобы активировать новые настройки пользователя и группы.
Проверьте установку докера, запустив:
docker run hello-world
Теперь вы сможете запускать оригинальную команду docker run
:
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
-h $HOSTNAME -v $HOME/.Xauthority:/home/hakon/.Xauthority gui-test-ubuntu-2004
Введите xhost + local:docker
перед запуском docker.