
Ich versuche, das X-Fenster auf einen Docker-Container umzuleiten, und teste es mit xeyes. Ich habe ein Ubuntu-Docker-Image verwendet.
Mein Dockerfile:
FROM ubuntu
RUN apt-get update
RUN apt-get -y install x11-apps
Bild erstellen:
docker build -t x11 .
vor dem Starten des Containers, um alle Verbindungen zum X-Server zuzulassen:
xhost +
Ich habe die X-Umleitung getestet und sie war ok:
ssh -X localhost xeyes
Startcontainer:
docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --rm x11 xeyes
und habe diese Ausgabe erhalten:
Error: Can't open display: :0
Ich habe es auch so versucht:
docker run -it --net=host --env="DISPLAY" --volume="/tmp/.X11-unix/X0:/tmp/.X11-unix/X0:rw" --rm x11 xeyes
und habe den gleichen Fehler bekommen:
Error: Can't open display: :0
Ich habe auch die Lösung ausprobiert, die aufSSH X-Forward zum mit Docker-Container gemeinsam genutzten X11-Socket, habe aber das gleiche Ergebnis erhalten.
Ich verwende Centos 7 als Host. Anscheinend hängt das mit dem X-Server auf Centos zusammen. Ich habe es in einer virtuellen Maschine mit Kubuntu 19.04 mit Standardinstallation ausprobiert, Docker installiert und es hat perfekt funktioniert.
AKTUALISIERT:
Ausführen dieser Befehle als Root:
ausearch -c 'xeyes' --raw | audit2allow -M my-xeyes
semodule -i my-xeyes.pp
es hat bei allen Benutzern funktioniert!
Irgendeine Idee, warum?
Antwort1
Bei Verwendung von Ubuntu:20.04
Ich habe festgestellt, dass -u 0 das Problem für Podman und -u $UID für Docker löst.
$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
Installieren Sie in der Docker-Datei x11-apps