Es sieht so aus, als würden Sie alles tun, was ich auch mache, außer Sie teilen die .Xauthority zum Zeitpunkt der Containererstellung. Das heißt, wenn Sie nach dem Erstellen des Containers einmal ssh -X auf Ihrem Computer installiert haben, ist die .Xauthority nicht mehr gültig. Sie können ssh -X nicht von einem anderen Terminal in den gleichen Computer einbinden und die .Xauthority verwenden. Ssh -X ändert die .Xauthority jedes Mal für das neueste Terminal. Ich habe es nur zum Laufen gebracht, indem ich die .Xauthority jedes Mal kopiere, wenn ich ssh -X auf meinen Computer stelle und den Bildschirm mit meinem Container teilen möchte.
Hinweis: Ich teile ein Gerät und eine Rechner-ID, weil ich eine Webcam-Ausgabe weitergeleitet habe
1.Erstellen Sie den Container und weisen Sie xhost an, die Weiterleitung von der Container-ID zuzulassen:
sudo docker run -it -d \ --net=host \ --env="DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --device="/dev/video0:/dev/video0" \ --volume="/path/to/your/sharedDockerFiles:/root/sharedDockerFiles" \ --volume="/etc/machine-id:/etc/machine-id" \ yourdockerrepo/image:tag \ bash export containerId=$(docker ps -l -q) sudo xhost +local:`sudo docker inspect --format='{{ .Config.Hostname }}' $containerId` sudo docker start $containerId
2. Kopieren Sie .Xauthority vom Host-Verzeichnis in das sharedDockerFiles-Verzeichnis:
sudo cp ~/.Xauthority /path/to/your/sharedDockerFiles
3. Starten Sie Ihren Container und befestigen Sie ihn
4. Kopieren Sie die .Xauthority in Ihrem freigegebenen Ordner in die Startseite Ihres Containers
sudo cp /root/sharedDockerFiles/.Xauthority ~/
5. (einmalig erforderlich): Bearbeiten Sie / etc / ssh / ssh_config des Containers unter Host *, um Folgendes aufzunehmen:
ForwardX11 yes X11Forwarding yes
6. Starten Sie den Container neu und fügen Sie die GUI-App erneut hinzu
7. Wenn Sie immer noch Probleme haben, stellen Sie sicher, dass die Variable $ DISPLAY im Container mit der des Hosts identisch ist
echo $DISPLAY #do this in the container exit echo $DISPLAY #do this in the host, should be the same as container's #if they aren't equal, start container and: export DISPLAY= #put the output of your host's $DISPLAY variable here