ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: этот вопрос задавали в разных формах на Stackoverflow и других площадках, но мне не удалось заставить ни один из них работать. Поэтому я надеюсь, что кто-то может помочь мне понять это раз и навсегда.
Мне нужно включить работу x11-forwarding в моем контейнере Docker вообще без использования xhost
из-за проблем с безопасностью. Я хочу предоставить сокет /tmp/.X11-unix
и ~/.Xauthority
контейнеру Docker, чтобы он мог использовать их для подключения к X-серверу, как клиент.
Я мог бы свести свою проблему к простому Dockerfile
. У меня есть docker-compose.yml
для запуска этого Dockerfile
.
Dockerfile
:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
docker-compose.yml
:
version: '2.3'
services:
test:
build: .
command: /bin/bash
environment:
DISPLAY: $DISPLAY
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- ~/.Xauthority:/root/.Xauthority
Два файла находятся в одной папке. Бежать:
# To build the container
$ docker-compose up --build
# To run it
$ docker-compose run test
# In the container run:
$ xclock
# See the xauth list
$ xauth list
Если вы запустите xhost +
в хост-системе, аутентификация с X-сервера будет отменена, и программа xclock
запустится успешно. В противном случае он будет жаловаться, что Error: Can't open display: :0
. Я хочу решить эту проблему без xhost
, а просто установив успешное соединение с X-сервером через открытый сокет и X-аутентификацию. Любая помощь в этом?
Операционная система: Ubuntu 16.04.
Версия Docker: 18.09.1, сборка 4c52b90.
docker-compose версия: 1.23.2, сборка 1110ad01.