Я хотел бы запустить приложение 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для предоставления.Xauthoritycookie - Объем
/tmp/.X11-unix:/tmp/.X11-unix:roдля предоставления доступа к сокету X11 - Запускает команду
su - docker-user -c "export DISPLAY=$DISPLAY && xterm"suиспользовался для запуска в качествеdocker-userDISPLAYперенаправлено в контекстsu
К сожалению, этого еще недостаточно. В то время как xterm в операционной системе хоста подключается к моему локальному X-серверу без проблем, xterm в контейнере говорит Xt error: Can't open display: localhost:10.0 .
Я подтвердил, что «localhost:10.0» является правильным, localhost существует в контейнере /etc/hosts , и cookie и сокет делают это с правильными разрешениями.
Что еще может пойти не так?
