在 macOS 上通过 XQuartz 对 Docker 内 GUI 程序进行 X11 转发

在 macOS 上通过 XQuartz 对 Docker 内 GUI 程序进行 X11 转发

XQuartz 安装与配置

在 macOS 上,默认情况下没有内置 X11 服务器。需要安装 XQuartz,它是 macOS 上的 X11 服务器实现

1
2
## 通过 brew 安装
brew install xquartz --cask

安装完后打开 XQuartz,进入 Settings > Security勾选 Allow connections from network clients,然后重启 XQuartz,查看 XQuartz 的进程号以及占用的端口

1
lsof -p $(launchctl list | grep 'xquartz.X11' | awk '{print $1}') | grep LISTEN

输出格式应为

1
2
COMMAND    PID       ...  NAME
X11.bin ${进程号} ... TCP *:${监听端口} (LISTEN)

进行 X11 转发

利用 xhost 指令允许来自本机的连接

1
2
3
xhost + localhost
# 如果是 remote 也可以替换为实际地址
xhost + 192.168.1.7

直接使用 xhost 指令可以打印允许的网络连接,例如

1
2
3
4
5
>> xhost
access control enabled, only authorized clients can connect
INET:192.168.1.7 #也可能是 anonymous
INET6:localhost
INET:localhost

完成后可以使用以下指令进行测试

1
docker run -e DISPLAY=docker.for.mac.host.internal:0 --rm gns3/xeyes
  • 此处 -e DISPLAY=docker.for.mac.host.internal:0的作用为添加 DISPLAY这一环境变量,数字 0 根据 XQuartz 监听端口的不同会有所改变,一般来说默认的端口是 6000,倘若实际使用过程中是 6001,只需要把 0 改为 1,其他以此类推即可。其中docker.for.mac.host.internal也可以替换成host.docker.internal或者本机地址。

Reference


在 macOS 上通过 XQuartz 对 Docker 内 GUI 程序进行 X11 转发
https://blog.iks-ran.com/2025/01/09/x11-forwarding-for-docker-on-macos/
Author
iks-ran
Posted on
January 9, 2025
Licensed under