docker 使用GUI ROS2

终极解决方案:重新配置 VcXsrv + 替换显示地址

第一步:彻底重启 VcXsrv(Windows 端,关键!)
  1. 右键 Windows 任务栏右下角的 VcXsrv 图标 → 选择 Exit,完全关闭 VcXsrv;

  2. Win + R 输入 cmd,以管理员身份启动命令提示符;

  3. 在管理员 cmd 中执行以下命令启动 VcXsrv(强制关闭访问控制,避免图形界面设置遗漏): cmd

    复制代码
    "C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -terminate -lesspointer -multiwindow -clipboard -wgl -dpi auto

    说明:-ac 就是 Disable access control(关闭访问控制),这是解决连接拒绝的核心参数。

第二步:在容器内替换 DISPLAY 地址(用 Windows 本机 IP)

host.docker.internal 偶尔会有解析问题,直接用 Windows 的实际 IP 更稳定:

  1. 在 Windows 端按 Win + R 输入 cmd,执行 ipconfig,找到 WLAN / 以太网 的 IPv4 地址(比如 192.168.1.100);

  2. 在容器内执行(替换成你的 Windows IP): bash

    运行

    复制代码
    # 用 Windows 实际 IP 替换 display 地址
    export DISPLAY=192.168.1.100:0
    export QT_X11_NO_MITSHM=1
    
    # 重新测试 xeyes(此时应弹出窗口)
    xeyes
第三步:启动 rviz2

如果 xeyes 能正常显示,直接启动:

bash

运行

复制代码
source /opt/ros/humble/setup.bash
rviz2

兜底方案:若仍无法连接(检查 Windows 防火墙)

  1. 临时关闭 Windows 防火墙:
    • 打开 Windows 设置 → 隐私和安全 → Windows 安全中心 → 防火墙和网络保护;
    • 依次关闭 "专用网络""公用网络" 防火墙(测试完成后记得打开);
  2. 重新在容器内执行 xeyes,确认是否能显示。

为什么之前的配置无效?

  1. 图形界面启动 VcXsrv 时,可能误操作没勾选 Disable access control,用命令行启动能强制生效;
  2. host.docker.internal 依赖 Docker 网络解析,偶尔会失效,直接用 Windows 本机 IP 更可靠;
  3. Windows 防火墙默认会拦截 X11 端口(6000),导致容器无法连接显示。

总结

  1. 核心问题是 VcXsrv 未关闭访问控制Windows 防火墙拦截,而非容器内配置;
  2. 用命令行启动 VcXsrv(带 -ac 参数)+ 替换为 Windows 实际 IP,能解决 99% 的连接拒绝问题;
  3. xeyes 能显示 → rviz2 必能启动,反之先排查 VcXsrv 和防火墙。

按这个步骤操作,你就能看到 rviz2 的 GUI 窗口了。如果 xeyes 仍提示 Can't open display,告诉我你的 Windows IP 和 VcXsrv 启动方式,我帮你定位最后一步问题。

相关推荐
吴佳浩8 小时前
AI 工程师知识地图:模型格式、框架、部署工具一次讲明白
人工智能·aigc·ai编程
IT_陈寒9 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
码农胖大海9 小时前
AI额度不够用的解决方案
人工智能
后端小肥肠9 小时前
小红书虚拟商品怎么做?我先用 Skill 跑通了壁纸品类
人工智能·aigc·agent
feiyu_gao9 小时前
从零搭建个人 AI 工作台:一个管理者的 3 个月实验
人工智能·aigc·团队管理
先吃饱再说9 小时前
判断回文字符串,从一行代码到双指针优化
算法
程序员cxuan10 小时前
一句话,让你用上 GPT-5.6
人工智能·后端·程序员
机器之心10 小时前
AI圈刚开始谈Loop Engineering,两位95后博士已经盯上了人类闭环数据
人工智能·openai
澄旭10 小时前
一文讲清 MCP:AI 应用连接外部世界的标准协议
人工智能
机器之心10 小时前
不只DeepSeek,阶跃等开源JetSpec:大模型解码提速近10倍
人工智能·openai