Подключиться к X11-серверу из докера без xhost, но с xauth

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: этот вопрос задавали в разных формах на 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.


person sharif1133    schedule 04.02.2019    source источник


Ответы (1)


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

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

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

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

person emory    schedule 05.02.2019
comment
Спасибо за ответ, у меня тоже не получилось. Кроме того, режим host для сети — это то, что мне не нравится в моем случае использования, так как я собираюсь использовать свой контейнер в более сложном сценарии. - person sharif1133; 05.02.2019