# ============================================================================= # docker-compose.yml —— 用 docker-compose 编排 ROS2 开发容器。 # # 与裸 docker run 相比,docker-compose 提供: # - YAML 声明式配置(易读、易版本管理) # - 一键 build / up / down / logs # - 多服务依赖、网络、卷的统一管理 # ============================================================================= services: ros2: # build: 用同目录的 Dockerfile 构建镜像。 # image: 同时打标签,后续 docker-compose down 不会丢镜像。 build: . image: ros2-humble-dev:latest container_name: ros2_dev # privileged: 特权模式,便于以后调系统工具(默认足够,不必开)。 privileged: true # stdin_open + tty:docker exec -it 时能获得交互式 shell。 stdin_open: true tty: true # network_mode: host —— 让容器使用主机网络栈。 # 重要:DDS 默认走 UDP 多播,跨容器/跨主机时必须可见; # host 网络让多容器间直接互见,适合单机多机的快速调试。 network_mode: host environment: # ROS_DOMAIN ID:0~232(默认 0);同一 ID 的节点互相可见, # 同一机器多项目互不干扰时给每个项目不同 ID。 - ROS_DOMAIN_ID=0 # RMW 留空,使用 ROS2 Humble 默认的 rmw_fastrtps_cpp; # 若要切换到 Cyclone DDS,需先在镜像内 apt install ros-humble-rmw-cyclonedds-cpp。 # 关键卷挂载:把宿主的整个 ros2 工程(上一级目录) 挂到容器 /root/ros2_ws, # 改动代码即时同步,容器内 colcon build 即可生效。 volumes: - ..:/root/ros2_ws working_dir: /root/ros2_ws # 容器内默认命令:tail -f /dev/null 让容器"挂起不死", # 用户再 docker exec 进去手动开发。 command: ["bash", "-lc", "tail -f /dev/null"]