Похоже, вы делаете все то же самое, что и я, за исключением того, что вы делитесь .Xauthority во время создания контейнера. Это означает, что если вы когда-либо создадите ssh -X на своей машине после создания контейнера, .Xauthority больше не будет действительным. Вы не можете ssh -X из другого терминала в тот же компьютер и вернуться назад и использовать .Xauthority, ssh -X каждый раз меняет .Xauthority для самого последнего терминала. Я только заставил его работать, копируя .Xauthority каждый раз, когда я запускаю ssh -X на свою машину и пытаюсь поделиться экраном с моим контейнером.
примечание: я поделился устройством и идентификатором машины, потому что я переадресовал выходные данные веб-камеры
1. Создайте контейнер и сообщите xhost, чтобы разрешить пересылку с идентификатора контейнера:
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. Скопируйте .Xauthority из домашнего хоста в каталог sharedDockerFiles:
sudo cp ~/.Xauthority /path/to/your/sharedDockerFiles
3. Запустите и прикрепите свой контейнер
4. Скопируйте .Xauthority в вашей общей папке в ваш домашний контейнер
sudo cp /root/sharedDockerFiles/.Xauthority ~/
5. (необходимо один раз): отредактируйте файл / etc / ssh / ssh_config контейнера в Host *, включив в него:
ForwardX11 yes X11Forwarding yes
6. Перезапустите свой контейнер, подключите и запустите приложение с графическим интерфейсом.
7. Если у вас все еще есть проблемы, убедитесь, что переменная $ DISPLAY в контейнере совпадает с переменной хоста
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