Я хотел бы запустить приложение GUI в контейнере с удаленного компьютера.
Я не хочу решать эту проблему, добавив хост SSH в контейнер, потому что
- У меня уже есть доступ к хост-машине через SSH
- Это добавляет ненужные накладные расходы
- Это делает контейнер непереносимым между удаленным и локальным использованием
Я уже могу успешно запускать приложения с графическим интерфейсом на хосте, но не из контейнера. Вот шаги, которые я сделал до сих пор:
хозяин
- xauth +(не на длительный срок, но полезно для устранения возможных проблем)
- docker-userс uid 501000 на хосте ==- docker-userс uid 1000 в контейнере через функцию пространства имен
- .Xauthorityскопирован в домашнюю папку Docker- docker-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-user
- DISPLAYперенаправлено в контекст- su
 
К сожалению, этого еще недостаточно. В то время как xterm в операционной системе хоста подключается к моему локальному X-серверу без проблем, xterm в контейнере говорит Xt error: Can't open display: localhost:10.0 .
Я подтвердил, что «localhost:10.0» является правильным, localhost существует в контейнере /etc/hosts , и cookie и сокет делают это с правильными разрешениями.
Что еще может пойти не так?
