Подключение к X11-серверу из докера без xhost, но с xauth - PullRequest
0 голосов
/ 05 февраля 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Этот вопрос задавался в разных формах на Stackoverflow и в других местах, но я не мог заставить никого работать.Поэтому я надеюсь, что кто-то может помочь мне понять это раз и навсегда.

Мне нужно включить работу пересылки x11 на моем контейнере 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

1 Ответ

0 голосов
/ 05 февраля 2019

Я просто размышляю.Не могли бы вы использовать

  • --network host,
  • --env DISPLAY=127.0.0.1 и
  • --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix,readonly=true

Вроде быработать, но я лично не пробовал.Однако вы можете решить, что просто не хотите использовать хост-сеть.

ОБНОВЛЕНИЕ: Я пробовал, и это не работает.Я оставлю этот ответ как пример чего-то, что не работает.

...