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

如何实现Ubuntu上Docker到Mac的X转发显示

解决Docker容器X11转发到Mac的问题

核心原因

通过ssh -X连接Ubuntu时,X11转发的权限控制依赖主机的XAUTHORITY文件,容器默认无法直接访问主机的X转发端口;同时Mac的XQuartz默认限制网络客户端连接,导致容器的X程序无法显示。

分步解决

1. 配置Mac的XQuartz

打开XQuartz,进入偏好设置 -> 安全性,勾选「允许来自网络客户端的连接」,重启XQuartz生效。

2. 在Ubuntu主机的ssh会话中配置权限

登录Ubuntu的ssh -X会话,执行以下命令:

# 允许本地用户/容器访问Xserver
xhost +local:
# 查看当前XAUTHORITY路径(后续配置要用到)
echo $XAUTHORITY
# 查看当前DISPLAY值
echo $DISPLAY

3. 修改docker-compose.yml

根据上面获取的信息调整配置:

services:
  test:
    image: xeyes_container
    tty: true
    command: xeyes
    environment:
      - DISPLAY=${DISPLAY}
      # 容器内的XAUTHORITY路径需与挂载路径一致
      - XAUTHORITY=/host_xauth
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      # 挂载主机的XAUTHORITY文件到容器
      - ${XAUTHORITY}:/host_xauth
    # 共享主机网络,让容器能访问ssh转发的X端口
    network_mode: host
    # 使用主机当前用户运行容器,避免权限不匹配
    user: ${USER}

4. 验证运行

在Ubuntu的ssh会话中执行:

docker compose up

此时容器内的xeyes应该能在Mac的XQuartz窗口中显示。

补充说明

  • 若不想使用network_mode: host,可替换为以下操作:
    1. 获取Ubuntu主机的局域网IP:hostname -I
    2. 设置容器的DISPLAY为[主机IP]:[DISPLAY后缀](例如192.168.1.100:10.0)
    3. 在主机执行xhost +[主机IP]允许容器访问
  • 确保容器镜像中安装了xauth工具(Ubuntu镜像可执行apt install -y xauth)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:17