Leiten Sie das X-Fenster zu einem Docker-Container um.

Leiten Sie das X-Fenster zu einem Docker-Container um.

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

verwandte Informationen