
Date:2026.05.31Author:aimage一、简介应用docker-compose进行不同容器的管理容器间用ros2进行通讯发现只能发现topic但是没有数据。docker-compose.yaml为services: get_rtsp: image: ${IMAGE} container_name: get_rtsp restart: on-failure privileged: true network_mode: host working_dir: /home/aimage/Workspace/dev/get_rtsp_ws environment: - DISPLAY:0 volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /home/aimage/Workspace/dev/get_rtsp_ws:/home/aimage/Workspace/dev/get_rtsp_ws command: ./run.sh logging: driver: local options: max-size: 10m max-file: 10 push_stream: image: ${IMAGE} container_name: push_stream restart: on-failure privileged: true network_mode: host working_dir: /home/aimage/Workspace/dev/push_stream_ws environment: - DISPLAY:0 volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /home/aimage/Workspace/dev/push_stream_ws:/home/siasun/Workspace/dev/push_stream_ws command: ./run.sh logging: driver: local options: max-size: 10m max-file: 10二、原因1ROS2 Humble 默认 FastDDS 开启共享内存传输2同一台机器、同一 ROS_DOMAIN_ID 的进程优先走 本地共享内存 收发消息不走网络套接字3所有容器都是 network_mode: host共享宿主机内存空间但容器 PID 命名空间隔离因此DDS 发现机制基于 UDP 广播正常 ros2 topic list 能看到话题共享内存句柄 / PID 对端不可见 消息无法通过SHM 投递回调不触发三、解决所有容器共享宿主机的 /dev/shm、System V 共享内存、信号量。在docker-compose.yaml中增加选项ipc: host问题完美解决。学习记录系列文章难免有纰漏欢迎您的宝贵意见四、参考[1] https://blog.csdn.net/qq_36176663/article/details/159388384