Docker 安装 ROS 2

本文给出一个基于 Dockerfile + Docker Compose 的 ROS 2 Humble 安装流程,按步骤执行即可完成环境部署。

1. 准备目录结构

建议目录结构如下:

  • ros2_docker/
  • ros2_docker/ws/
  • ros2_docker/ws/src/
  • ros2_docker/Dockerfile
  • ros2_docker/compose.yml

2. 编写 Dockerfile

在项目根目录创建并编辑 Dockerfile

nano Dockerfile
FROM ros:humble-ros-base
ENV DEBIAN_FRONTEND=noninteractive

# ============================ 可按需配置 APT 镜像源 ============================

# ========
# 1. 永久切换 apt 源到中科大 USTC(ubuntu-ports,arm64 友好)
# ========
RUN set -eux; \
    . /etc/os-release; \
    codename="${VERSION_CODENAME:-jammy}"; \
    \
    cat > /etc/apt/sources.list <<EOF
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ ${codename} main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ ${codename}-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ ${codename}-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ ${codename}-security main restricted universe multiverse
EOF

# =======
# 2. (强烈建议)配置 APT 超时与重试,减少网络抖动影响
# =======
RUN printf 'Acquire::Retries "8";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\n' \
    > /etc/apt/apt.conf.d/99retries

RUN apt-get update && apt-get install -y --no-install-recommends \
    ros-humble-desktop \
    && rm -rf /var/lib/apt/lists/*

# 保存并退出编辑器

3. 编写 compose.yml

在项目根目录创建并编辑 compose.yml

nano compose.yml
services:
  ros2:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ros2_desktop
    init: true
    tty: true
    stdin_open: true
    network_mode: host
    privileged: true

    environment:
      - DISPLAY=${DISPLAY}
      - QT_X11_NO_MITSHM=1
      - XAUTHORITY=/tmp/.docker.xauth
      - ROS_DOMAIN_ID=0
      - RMW_IMPLEMENTATION=rmw_fastrtps_cpp

    volumes:
      - /dev:/dev
      - ./ws:/root/ws
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
      - /tmp/.docker.xauth:/tmp/.docker.xauth:rw

    working_dir: /root
    command: >
      bash -c "
      source /opt/ros/humble/setup.bash &&
      exec bash
      "
# 保存并退出编辑器

4. 构建镜像并启动容器

sudo docker compose build
sudo docker compose up -d

# 如需关闭容器:docker compose stop

sudo docker exec -it ros2_desktop bash
cd ws
colcon build
source install/setup.bash

5. 验证安装结果

# 验证安装是否成功
xhost +local:docker
rviz2

6. 验证失败时的补充处理

若上一步验证失败,可执行以下命令进行补装与环境配置:

apt update
apt install -y ros-humble-rviz2
nano ~/.bashrc
# 按以下顺序添加内容
source /opt/ros/humble/setup.bash
source ~/ws/install/setup.bash
rviz2