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

无法通过localhost以外的方式连接UrSim Docker容器

问题描述

我尝试运行ursim_e-series Docker容器,并通过ur_robot_driver与其连接。按照说明使用以下命令启动容器:

docker run --rm -it -p 5900:5900 -p 6080:6080 -v ${HOME}/.ursim/urcaps:/urcaps -v ${HOME}/.ursim/programs:/ursim/programs --name ursim --net ursim_net --ip 192.168.56.101 universalrobots/ursim_e-series

理论上可通过浏览器访问http://192.168.56.101:6080/vnc.html,但实际遇到以下问题:

  • 容器启动成功,但只能通过http://localhost:6080/vnc.html访问VNC,且无法看到机器人模拟器;
  • 使用ros2 launch ur_robot_driver ur_control.launch.py ur_type:=ur5e robot_ip:=192.168.56.101连接时,无法找到该IP下的机器人。

环境信息

  • Linux Ubuntu 22.04
  • Docker Desktop 4.21.1(114176)

相关命令输出

ifconfig输出

enp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.13.136.72  netmask 255.255.254.0  broadcast 10.13.137.255
        inet6 fe80::7943:8ae8:4740:e969  prefixlen 64  scopeid 0x20<link>
        ether 98:fa:9b:bb:d4:af  txqueuelen 1000  (Ethernet)
        RX packets 2896104  bytes 772999648 (772.9 MB)
        RX errors 0  dropped 222  overruns 0  frame 0
        TX packets 2516553  bytes 170849174 (170.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 251007  bytes 56927434 (56.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 251007  bytes 56927434 (56.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker network inspect -v ursim_net返回结果

[
    {
        "Name": "ursim_net",
        "Id": "249333ce0b18910f29a69f69d5e9ff6229a14faaf4ff14f8d3c9cb51062d7c80",
        "Created": "2023-07-26T12:59:11.831234829Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.56.0/24",
                    "Gateway": "192.168.56.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "42219db95f6fd3be6fac11943664582a99e34276239e47844fe74f0c6d5e1b1b": {
                "Name": "ursim",
                "EndpointID": "2485afa6b5ed449706dca7164dc736325e5a2dab2724666204e43d71f431df14",
                "MacAddress": "02:42:c0:a8:38:65",
                "IPv4Address": "192.168.56.101/24",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
解决方案

1. 核心问题分析

从网络检查结果看,容器已分配192.168.56.101,但主机网卡无该网段IP,导致主机无法直接访问容器IP。Docker Desktop在Linux环境下的自定义bridge网络默认不会将网段暴露给主机,同时容器内的机器人服务可能未正常绑定到指定IP。

2. 修复步骤

方法一:添加主机路由打通网段

在主机上添加路由规则,让主机能访问容器所在的192.168.56.0/24网段:

sudo ip route add 192.168.56.0/24 via $(docker network inspect ursim_net --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}')

执行后先ping192.168.56.101确认连通,再尝试访问VNC和启动ROS2驱动。

方法二:改用host网络模式(最简方案)

修改容器启动命令,使用host网络模式让容器直接复用主机网络,无需端口映射和自定义IP:

docker run --rm -it --network host -v ${HOME}/.ursim/urcaps:/urcaps -v ${HOME}/.ursim/programs:/ursim/programs --name ursim universalrobots/ursim_e-series

此时访问VNC用http://localhost:6080/vnc.html,ROS2驱动连接时robot_ip填localhost即可。

方法三:检查容器内服务状态

进入容器确认VNC和机器人服务是否正常运行:

docker exec -it ursim bash
# 查看VNC服务进程
ps aux | grep vnc
# 查看机器人控制器进程
ps aux | grep urserver

若服务未启动,手动启动对应服务(可参考容器内的启动脚本)。

3. 验证流程

  1. 确认主机与容器IP能ping通;
  2. 访问VNC界面,确认机器人模拟器正常显示;
  3. 启动ROS2驱动,检查连接日志确认成功建立通信。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:37:10