Без контейнера Docker прямое выполнение программы X11 на удаленном сервере с использованием пересылки SSH X11 (ssh -X). Я попытался заставить ту же самую работу работать, когда приложение запускается внутри контейнера Docker на сервере. При SSH-входе на сервер с параметром -X туннель X11 настраивается, а переменная среды "$ DISPLAY" автоматически устанавливается как обычно "localhost: 10.0" или аналогичная. Если я просто попробую запустить X-приложение в Docker, я получаю эту ошибку:
Error: GDK_BACKEND does not match available displays
Моя первая идея состояла в том, чтобы фактически передать $ DISPLAY в контейнер с параметром "-e" следующим образом:
docker run -ti -e DISPLAY=$DISPLAY name_of_docker_image
Это помогает, но это не решает проблему. Сообщение об ошибке изменится на:
Unable to init server: Broadway display type not supported: localhost:10.0
Error: cannot open display: localhost:10.0
После поиска в Интернете я понял, что могу исправить магию xauth, чтобы исправить аутентификацию. Я добавил следующее:
SOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
chmod 777 $XAUTH
docker run -ti -e DISPLAY=$DISPLAY -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH \
-e XAUTHORITY=$XAUTH name_of_docker_image
Однако это работает только в том случае, если также добавить " --net хост " в команду докера:
docker run -ti -e DISPLAY=$DISPLAY -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH \
-e XAUTHORITY=$XAUTH --net host name_of_docker_image
Это нежелательно, так как делает всю сеть хоста видимой для контейнера.
Что теперь отсутствует, чтобы полностью запустить его на удаленном сервере в докере без "--net хоста"?