
Я пытаюсь перенаправить 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