Перенаправить X-окно в контейнер Docker

Перенаправить X-окно в контейнер Docker

Я пытаюсь перенаправить X window на контейнер Docker и использую xeyes для проверки. Я использовал образ ubuntu docker.

Мой Dockerfile:

FROM ubuntu
RUN apt-get update
RUN apt-get -y install x11-apps

Создание изображения:

docker build -t x11 .

перед запуском контейнера, чтобы разрешить все соединения с X-сервером:

xhost +

Тестирование перенаправления X прошло успешно:

ssh -X localhost xeyes

Начальный контейнер:

docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --rm x11 xeyes

и получил такой вывод:

Error: Can't open display: :0

Я также попробовал этот способ:

docker run -it --net=host --env="DISPLAY" --volume="/tmp/.X11-unix/X0:/tmp/.X11-unix/X0:rw" --rm x11 xeyes

и получил ту же ошибку:

Error: Can't open display: :0

Я также попробовал решение, опубликованное наSSH X-Forward на сокет X11, общий с контейнером Docker, но получил тот же результат.

Я использую Centos 7 в качестве хоста. Видимо, что-то связано с X-сервером на Centos. Я попробовал это в виртуальной машине с Kubuntu 19.04 с установкой по умолчанию, установил docker и все заработало отлично.

ОБНОВЛЕНО:

Выполнение этих команд от имени пользователя root:

ausearch -c 'xeyes' --raw | audit2allow -M my-xeyes
semodule -i my-xeyes.pp

это сработало для всех пользователей!

Есть идеи почему?

решение1

При использовании Ubuntu:20.04

Я обнаружил, что -u 0 решит проблему для podman, а -u $UID для docker.

$podman run -it -u 0 -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:rw podman-image xclock

$docker run -it -u $UID -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:rw docker-image xclock

В файле docker установите x11-apps

Связанный контент