Запустите простое приложение X11 в Docker-контейнере на Ubuntu 20. 04

Я слежу за этим примером того, как запустить приложение 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 не отображается. Что мне здесь не хватает?

1
задан 11 June 2020 в 02:14

2 ответа

Скорее всего, проблема в том, что вы установили докер с привязкой . Согласно 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 :

  1. Remove docker:

      sudo snap remove docker
    
  2. Перейдите на 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

  3. Установите их в следующем порядке:

      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
    
  4. Добавьте своего пользователя в группу docker, чтобы избежать необходимости вводить sudo для запуска docker :

     sudo addgroup --system docker
    sudo usermod -a -G docker $ USER
    
  5. Перезагрузите компьютер, чтобы активировать новые настройки пользователя и группы.

  6. Проверьте установку докера, запустив:

     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
1
ответ дан 19 June 2020 в 21:26

Введите xhost + local:docker перед запуском docker.

1
ответ дан 28 December 2020 в 08:00

Другие вопросы по тегам:

Похожие вопросы: