You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac OS下XQuartz运行Docker容器xeyes报Can't open display如何解决

问题背景

在版本为10.15.5的Mac设备上,尝试通过XQuartz运行Docker容器内的Xeyes应用时,进入容器执行xeyes命令收到报错:Error: Can't open display: 192.168.1.9:0,复现步骤如下:

  1. 执行命令brew install --cask xquartz安装XQuartz;
  2. 编写Dockerfile:
# Base Image
FROM alpine:latest

RUN apk update && \
    apk add --no-cache xeyes

# Set a working directory
WORKDIR /work

# Start a shell by default
CMD ["ash"]
  1. 执行命令docker build -t so_xeyes .构建镜像;
  2. 执行以下命令配置并启动容器:
# Set your Mac IP address
IP=$(/usr/sbin/ipconfig getifaddr en0)
echo $IP
# 输出为192.168.1.9

# Allow connections from Mac to XQuartz
/opt/X11/bin/xhost + "$IP"
# 输出为192.168.1.9 being added to access control list

# Run container
docker run -it -e DISPLAY="${IP}:0" -v /tmp/.X11-unix:/tmp/.X11-unix so_xeyes
  1. 进入容器后执行xeyes命令触发上述报错。
排查与解决步骤

按以下顺序逐一排查即可解决问题:

  • 第一步:确认XQuartz网络监听配置开启
    打开XQuartz,点击顶部菜单栏「XQuartz」→「偏好设置」→「安全性」标签,必须勾选「允许从网络客户端连接」选项。XQuartz默认关闭TCP 6000端口监听,仅靠xhost添加授权根本无法接收外部连接,这是该场景最高发的漏项。修改配置后必须完全退出XQuartz再重新启动才会生效。
  • 第二步:验证XQuartz本身运行正常
    在Mac本地终端执行/opt/X11/bin/xeyes,如果本地都无法弹出Xeyes窗口,先排查XQuartz安装问题:brew安装XQuartz后需要注销当前Mac用户重新登录,让X11相关环境变量加载生效,必要时可以重启设备后再测试。
  • 第三步:修正IP获取方式,避免网卡识别错误
    手动取en0网卡IP的方式兼容性很差:如果设备插了有线网卡、连了手机热点、开了VPN,活跃网卡可能不是en0,取到的IP根本不是当前和Docker互通的宿主机地址。Mac版Docker自带专用宿主机域名host.docker.internal,容器内可以直接解析到宿主机,无需手动取IP。
    测试阶段可以先临时放开XQuartz访问授权,避免IP授权范围错误:
    /opt/X11/bin/xhost +
    
    等功能跑通后再改成精确IP授权即可。
  • 第四步:排查防火墙拦截
    打开Mac系统偏好设置→「安全性与隐私」→「防火墙」,临时关闭防火墙测试;如果关闭后能正常连接,给XQuartz添加允许传入连接的规则即可。
  • 第五步:用正确参数启动容器
    不需要挂载/tmp/.X11-unix目录(走TCP连接不需要Unix Socket,Mac版Docker对该套接字的挂载存在权限兼容问题),直接执行以下命令启动容器:
    docker run -it -e DISPLAY="host.docker.internal:0" so_xeyes
    
    进入容器后直接执行xeyes即可正常弹出窗口。

内容的提问来源于stack exchange,提问作者ScottFred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:09:23