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

Docker容器内首次构建ROS2工作空间找不到ament_cmake问题求助

问题根因
  • docker/build脚本的环境变量加载逻辑错误:你写的/bin/bash -c "source /opt/ros/foxy/setup.bash"是启动了独立的子shell执行source命令,source加载的ROS环境变量仅在这个子shell内生效,子shell退出后,执行后续colcon build的父shell根本没有拿到ROS相关的环境变量,导致CMake找不到ament_cmake等ROS依赖包。
  • docker exec默认启动非交互式shell:你在Dockerfile中把ROS的source命令写入了/etc/bash.bashrc,但这个配置仅对交互式shell生效,docker exec默认执行的是非交互式shell,不会加载该配置,也不会自动导入ROS环境。
  • 手动执行和后续执行成功的原因:
    • 手动docker attach进入的是交互式shell,会自动加载/etc/bash.bashrc中的ROS环境配置,执行colcon build时环境变量正常。
    • 手动构建成功后,工作空间下会生成install/setup.bash等配置,后续执行脚本时即使上层环境没加载,colcon也能识别到已有工作空间的环境,所以不会报错。
修复方案

修改docker/build脚本内容,将source命令和colcon build放在同一个执行上下文中:

#!/bin/bash
set -eu -o pipefail

# project root directory, passed from ../build-in-docker
cd "$1"

# 直接在当前脚本shell中加载ROS环境,不要开启子shell
source /opt/ros/foxy/setup.bash
colcon build

也可以合并为单行执行避免shell兼容问题:

/bin/bash -c "source /opt/ros/foxy/setup.bash && colcon build"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:15:05