Невозможно открыть удаленный дисплей на Mac при запуске Docker - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть Dockerfile, написанный следующим образом:

FROM     joesan/raspi_opencv_3:latest
RUN      apt-get update
RUN      sudo apt-get install --no-install-recommends xserver-xorg
RUN      sudo apt-get install --no-install-recommends xinit
RUN      apt-get install -qqy x11-apps
RUN      mkdir -p /raspi_motion_detection/project
WORKDIR  /raspi_motion_detection/project
COPY     ./ $WORKDIR/
COPY     ./requirements.txt $WORKDIR/
ADD      . $WORKDIR
CMD      xclock

У меня Raspberry Pi, к которому я подключился по ssh с моего Mac (работает под управлением High Sierra).

Вот что я делаю:

  1. Я захожу в RaspPi с моего Mac
  2. Я выполняю команду docker, используя:
docker run -ti --device=/dev/vcsm \
--device=/dev/vchiq \
-e DISPLAY=$DISPLAY:0 \
-e XAUTHORITY=/.Xauthority \
-v /tmp/.X11-unix:/tmp/.X11-unix \
joesan/motion_detector
  1. Я получаю сообщение об ошибке, как показано ниже:

    Ошибка: не удается открыть дисплей: localhost: 11.0: 0

  2. Но когда я просто запускаю xclock прямо на ssh-терминале, я вижу, что открывается окно xclock.

Так что я не мог понять, почему запуск xclock из контейнера Docker препятствует открытию порта дисплея? Какие-либо причины? Я также наткнулся на этот пост здесь и следовал тому, что там было описано, но я не мог заставить его работать!

https://medium.com/@dimitris.kapanidis/running-gui-apps-in-docker-containers-3bd25efa862a

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Хорошо!Так что я думаю, что нашел решение своей проблемы!Вот что я сделал!

  1. Переустановил Raspberry Stretch Lite на мою SD-карту.Старый, кажется, получил некоторые устаревшие файлы!Вы можете пропустить этот шаг, но для меня на старой установке было несколько поврежденных файлов, поэтому я решил получить новую установку!

  2. На моем Raspberry Pi выполните следующую команду:

    список xauth

    Я копирую cookie локально в текстовый редактор, как мне понадобится позже!

  3. Удалена команда xclock из файла Docker, который яизначально было!

  4. Создайте файл Docker с помощью следующей команды:

docker run -it --net = host --device= / dev / vcsm --device = / dev / vchiq -e DISPLAY -v /tmp/.X11-unix joesan / motion_detector bash

Обратите внимание, что я запускаю команду bash для моего Dockerзапустите, чтобы я мог получить приглашение basj из запущенного образа!

Результат шага 3 даст мне приглашение bash из контейнера, который я только что выполнил на шаге 3

Теперь мне нужно установить xauth в образ

apt-get install xauth

Затем я добавляю куки xauth с шага 0

Именно после этого взрыва!Я получил то, что хочу!

0 голосов
/ 13 ноября 2018

Немного упрощено: каждый контейнер Docker работает внутри демона Docker, который в основном предоставляет урезанный ОС для каждого контейнера. У этой ОС нет оконного менеджера.

Именно поэтому команда xclock внутри контейнера Docker завершается с ошибкой.

Когда вы подключаетесь через ssh к вашему raspberry pi и вызываете xclock, он выполняется внутри операционной системы raspberry (вероятно, raspian), в которой есть работающий оконный менеджер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...