如何将 Docker for Mac 转发到 X11?
How to forward Docker for Mac to X11?
使用 Docker for Mac 1.12 (stable) 和 OS X 10.11.5 (15F34),我正在尝试将我的一个容器转发到 X11。
首先,我从 bash shell:
安装 XQuartz
$ 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 首选项 -> 安全选项卡中,我启用 "Allow connections from network clients"。
然后我应该在我的 bash shell 中 运行 xhost + $MY_IP_ADDRESS
,但我得到的只是这个错误:
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
我做错了什么?
原来 XQuartz 2.7.9 中存在一个错误。
当使用 XQuartz 2.7.10_beta2 时,它可以工作。
我在 Mac OS 上安装了 xQuartz 2.7.11。
我收到以下错误
<program>: cannot connect to X server <ip>:0
尝试 运行 docker 容器时。我尝试降级 XQuartz,但它仍然没有解决我的问题。
设置的一个关键部分是为 xhost 添加您的 ip 访问控制列表。
xhost + $(ipconfig getifaddr en0)
将ip添加到xhost后,一切正常。无需降级 Xquartz 版本。
解决方案
安装 XQuartz 后,您将需要重新启动计算机 as ;启动新的终端会话是不够的。
重新启动后,您可以使用 xhost
命令授予您所需的访问权限。请小心并了解过于宽容的规则的后果。这个其他讨论有更多信息:
其他发现
一路上我发现了一些额外的东西:
- XQuartz 必须首先是运行:
$ open -a XQuartz
- 您可以公开
127.0.0.1
而不是查找您的本地 IP (买者警告:我不是此设置含义的专家):
$ xhost + 127.0.0.1
127.0.0.1 being added to access control list
- 您可以将特殊的
host.docker.internal
标识符与 docker run
一起使用:
$ docker run -e DISPLAY=host.docker.internal:0 jess/firefox
# ♀️ magic ♂️
- 至少对我来说,
ctrl + c
不会关闭容器;我需要手动关闭 X11 window。
- 如果你退出 XQuartz,你 必须 在再次启动后用
xhost
重新授权(权限没有 "stick")。
- 这样做我不需要在调用
docker run
时挂载 /tmp/.X11-unix
。
我在 macOS Mojave (10.14.6) 上使用 XQuartz 2.7.11 和 Docker Desktop 2.1.0.2 对此进行了测试。
使用 Docker for Mac 1.12 (stable) 和 OS X 10.11.5 (15F34),我正在尝试将我的一个容器转发到 X11。
首先,我从 bash shell:
安装 XQuartz$ 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 首选项 -> 安全选项卡中,我启用 "Allow connections from network clients"。
然后我应该在我的 bash shell 中 运行 xhost + $MY_IP_ADDRESS
,但我得到的只是这个错误:
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
我做错了什么?
原来 XQuartz 2.7.9 中存在一个错误。
当使用 XQuartz 2.7.10_beta2 时,它可以工作。
我在 Mac OS 上安装了 xQuartz 2.7.11。
我收到以下错误
<program>: cannot connect to X server <ip>:0
尝试 运行 docker 容器时。我尝试降级 XQuartz,但它仍然没有解决我的问题。
设置的一个关键部分是为 xhost 添加您的 ip 访问控制列表。
xhost + $(ipconfig getifaddr en0)
将ip添加到xhost后,一切正常。无需降级 Xquartz 版本。
解决方案
安装 XQuartz 后,您将需要重新启动计算机 as
重新启动后,您可以使用 xhost
命令授予您所需的访问权限。请小心并了解过于宽容的规则的后果。这个其他讨论有更多信息:
其他发现
一路上我发现了一些额外的东西:
- XQuartz 必须首先是运行:
$ open -a XQuartz
- 您可以公开
127.0.0.1
而不是查找您的本地 IP (买者警告:我不是此设置含义的专家):$ xhost + 127.0.0.1 127.0.0.1 being added to access control list
- 您可以将特殊的
host.docker.internal
标识符与docker run
一起使用:$ docker run -e DISPLAY=host.docker.internal:0 jess/firefox # ♀️ magic ♂️
- 至少对我来说,
ctrl + c
不会关闭容器;我需要手动关闭 X11 window。 - 如果你退出 XQuartz,你 必须 在再次启动后用
xhost
重新授权(权限没有 "stick")。 - 这样做我不需要在调用
docker run
时挂载/tmp/.X11-unix
。
我在 macOS Mojave (10.14.6) 上使用 XQuartz 2.7.11 和 Docker Desktop 2.1.0.2 对此进行了测试。