Я хотел бы запустить приложение GUI в контейнере с удаленного компьютера.
Я не хочу решать эту проблему, добавив хост SSH в контейнер, потому что
- У меня уже есть доступ к хост-машине через SSH
- Это добавляет ненужные накладные расходы
- Это делает контейнер непереносимым между удаленным и локальным использованием
Я уже могу успешно запускать приложения с графическим интерфейсом на хосте, но не из контейнера. Вот шаги, которые я сделал до сих пор:
хозяин
xauth +
(не на длительный срок, но полезно для устранения возможных проблем)docker-user
с uid 501000 на хосте ==docker-user
с uid 1000 в контейнере через функцию пространства имен.Xauthority
скопирован в домашнюю папку Dockerdocker-user
Dockerfile
- На основе альпийских
- Устанавливает
xauth
и, для целей тестирования,xterm
- Создает
docker-user
с правильным uid/gid
докер-Compose
- Переменная окружения
DISPLAY
пересылается в - Том
/home/docker-user/:/home/docker-user/:ro
для предоставления.Xauthority
cookie - Объем
/tmp/.X11-unix:/tmp/.X11-unix:ro
для предоставления доступа к сокету X11 - Запускает команду
su - docker-user -c "export DISPLAY=$DISPLAY && xterm"
su
использовался для запуска в качествеdocker-user
DISPLAY
перенаправлено в контекстsu
К сожалению, этого еще недостаточно. В то время как xterm в операционной системе хоста подключается к моему локальному X-серверу без проблем, xterm в контейнере говорит Xt error: Can't open display: localhost:10.0
.
Я подтвердил, что «localhost:10.0» является правильным, localhost существует в контейнере /etc/hosts
, и cookie и сокет делают это с правильными разрешениями.
Что еще может пойти не так?