Files
ROS2_learn/docker/docker-compose.yml
T
2026-08-03 18:09:35 +08:00

45 lines
1.8 KiB
YAML

# =============================================================================
# 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"]