Как перенаправить Docker для Mac на X11?

Использование Docker для Mac 1.12 (стабильная версия) и OS X 10.11.5 (15F34), я пытаюсь перенаправить один из своих контейнеров на X11.

Сначала я устанавливаю XQuartz из оболочки bash:

$ brew cask install xquartz

==> Downloading https://dl.bintray.com/xquartz/downloads/XQuartz-2.7.9.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask xquartz
==> Running installer for xquartz; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is XQuartz 2.7.9
==> installer: Installing at base path /
==> installer: The install was successful.
????  xquartz staged at '/usr/local/Caskroom/xquartz/2.7.9' (73M)

Затем я продолжаю настройку XQuartz...

open -a XQuartz

На вкладке «Настройки XQuartz» -> «Безопасность» я включаю «Разрешить подключения от сетевых клиентов».

Затем я должен запустить xhost + $MY_IP_ADDRESS в своей оболочке bash, но все, что я получаю, это эта ошибка:

xhost:  unable to open display ""

В конце концов, во всех руководствах, которые я читаю, говорится, что я должен запускать свой контейнер следующим образом:

docker run -e DISPLAY=$MY_IP_ADDRESS:0 -v /tmp/.X11-unix:/tmp/.X11-unix DOCKER_IMAGE

... но это не работает. В моем конкретном контейнере я получаю эту ошибку:

... cannot connect to X server 10.0.0.131:0

Что я делаю не так?


person fredrik    schedule 31.07.2016    source источник


Ответы (3)


Оказывается, в XQuartz 2.7.9 есть ошибка.

При использовании XQuartz 2.7.10_beta2 работает.

person fredrik    schedule 31.07.2016
comment
У меня была такая же проблема с версией 2.7.11. Я удалил и понизил версию до 2.7.10_beta2, и наконец все заработало. Мне просто нужно было перезапустить (вместо того, чтобы просто выйти из системы), и все заработало. - person revolutionary; 08.01.2018
comment
У меня было чертовски много времени с этим ... понижение версии и т. Д. Оказалось, что проблема заключалась в простой перезагрузке. Теперь работает безупречно на XQuartz 2.7.11 с Docker CE версии 17.12.0 на MacOS 10.13.3. - person horcle_buzz; 23.02.2018
comment
Отличные вакансии. Это работает, когда я понизил версию XQuaterz до 2.7.10_beta2. - person Ryan Chou; 06.10.2019

У меня установлен xQuartz 2.7.11 на Mac OS.

Я получал следующую ошибку <program>: cannot connect to X server <ip>:0 при попытке запустить контейнер Docker. Я попытался понизить версию XQuartz, но это все равно не решило мою проблему.

Важнейшей частью настройки является добавление списка управления доступом по IP для xhost.

xhost + $(ipconfig getifaddr en0)

После добавления ip в xhost все работает. Нет необходимости понижать версию Xquartz.

person dminer    schedule 14.03.2017
comment
2.7.11 у меня не работал (macOS Sierra 10.12.4 + Docker CE 17.03.1). Мне пришлось перейти на 2.7.10_beta2, чтобы все заработало. - person Coyotwill; 21.04.2017
comment
где хост? - person kyb; 24.03.2019
comment
Команду xhost следует вводить в окне xterm XQuartz. - person radarhere; 05.10.2020

Решение

После установки XQuartz вам необходимо перезагрузить компьютер как предложено horcle_buzz; запуска нового терминального сеанса недостаточно.

После перезагрузки вы можете предоставить доступ ко всему, что вам нужно, с помощью команды xhost. Просто будьте осторожны и понимайте последствия слишком либерального правила. В этом другом обсуждении есть дополнительная информация: Запуск Chromium внутри Docker - Gtk: невозможно открыть дисплей: :0

Дополнительные выводы

Некоторые дополнительные вещи, которые я обнаружил по пути:

  • XQuartz must be running first:
    $ open -a XQuartz
    
  • You can expose 127.0.0.1 instead of looking up your local IP (caveat emptor: I'm not an expert on the implications of this setting):
    $ xhost + 127.0.0.1
    127.0.0.1 being added to access control list
    
  • You can use the special host.docker.internal identifier with docker run:
    $ docker run -e DISPLAY=host.docker.internal:0 jess/firefox
    # ????‍♀️ magic ????‍♂️
    
  • По крайней мере, для меня ctrl + c не выключает контейнер; Мне нужно закрыть окно X11 вручную.
  • Если вы выходите из XQuartz, вы должны повторно авторизоваться с помощью xhost после его повторного запуска (разрешение не «прилипает»).
  • Делая это таким образом, мне не нужно было монтировать /tmp/.X11-unix при вызове docker run.

Я протестировал это с XQuartz 2.7.11 и Docker Desktop 2.1.0.2 на macOS Mojave (10.14.6).

person Mike Branski    schedule 12.09.2019