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

不同机器Docker容器中ROS2客户端跨机器通信问题求助

解决跨机器ROS2 Docker容器通信问题

1. 修正容器名称冲突

第二台机器的docker-compose.yml中,container2的container_name错误设置为container1,改为唯一名称避免冲突:

services:
  container2:
    image: osrf/ros:foxy-desktop
    container_name: container2  # 修正为container2
    stdin_open: true
    tty: true

2. 配置Docker Host网络模式

默认Docker bridge网络是单机隔离的,跨机器容器无法直接通信。将所有容器(含Discovery Server)改为使用宿主机网络栈,让节点通过宿主机IP互相访问:

第一台机器docker-compose.yml修改:

services:
  container1:
    image: osrf/ros:foxy-desktop
    container_name: container1
    stdin_open: true
    tty: true
    network_mode: host  # 启用host网络模式
  discovery_server:
    image: osrf/ros:foxy-desktop
    container_name: discovery_server
    stdin_open: true
    tty: true
    network_mode: host  # 启用host网络模式,无需再做端口映射

第二台机器docker-compose.yml修改:

services:
  container2:
    image: osrf/ros:foxy-desktop
    container_name: container2
    stdin_open: true
    tty: true
    network_mode: host  # 启用host网络模式

3. 让Discovery Server监听所有网卡

启动Discovery Server时,必须绑定到0.0.0.0,否则默认只监听localhost,导致其他机器无法连接:

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ros2 daemon stop && ros2 daemon start
fastdds discovery -i 0 -p 11811 -l 0.0.0.0  # 添加-l 0.0.0.0参数

4. 统一节点容器的RMW实现配置

所有运行ROS2节点的容器都需要指定使用rmw_fastrtps_cpp,否则无法兼容Discovery Server:

container1启动命令:

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DISCOVERY_SERVER=10.0.0.100:11811
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_discovery_server

container2启动命令:

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export ROS_DISCOVERY_SERVER=10.0.0.100:11811
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_discovery_server

5. 检查防火墙策略

  • 确保运行Discovery Server的第一台机器开放11811/UDP和11811/TCP端口。
  • 确认两台机器之间网络互通(可通过ping验证),无其他网络规则阻止容器通信。

验证流程

  1. 先在第一台机器启动Discovery Server和container1的listener节点。
  2. 在第二台机器启动container2的talker节点。
  3. 观察listener节点输出,若能接收talker发送的消息则配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:56:01