从 Dockerfile 和脚本调用时 ROS 命令不起作用
ROS command not working when called from Dockerfile and script
我正在创建一个 docker 容器来执行 ROS 包。
FROM ros:melodic
COPY . /rosdata
WORKDIR /rosdata
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && chmod +x setupROS.sh && bash -c "./setupROS.sh"
这个设置脚本可能比调试尝试需要的更加臃肿,目前看起来像这样:
#!/bin/sh
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y wget apt-utils
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | apt-key add -
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y ros-melodic-pcl-conversions ros-melodic-pcl-ros
apt-get update
DEBIAN_FRONTEND=noninteractive rosdep install --as-root apt:false --from-paths src --ignore-src --rosdistro melodic -y
DEBIAN_FRONTEND=noninteractive catkin_make
一切似乎都很好,直到最后一个命令失败
./setupROS.sh: line 10: catkin_make: command not found
如果我在 shellscript 中注释掉最后一条命令,只会自动 运行 前面的指令,然后打开一个交互式会话 (docker 运行 -it) 和 运行 这个 catkin_make 手动,它按预期工作。
我是否在此行中包含 DEBIAN_FRONTEND 变量没有区别。
在从 Dockerfile 调用的脚本中 运行 时 catkin_make 失败的原因是什么,但在手动 运行 时却没有?
根据我的经验,当我们 运行 行源 /opt/ros/melodic/setup.bash
时,catkin_make
被添加到路径中。通常,此行会在安装结束时添加到 .bashrc
。也许您 运行 在其中设置脚本的环境不会继承相同的 PATH
(类似于当您 运行 使用 sudo 时)。我建议只将 source /opt/ros/melodic/setup.bash
行添加到您的脚本中,看看是否有帮助。
除了@Vik 回答:
除了在 .bashrc
或 sh
文件中采购 /opt/ros/melodic/setup.bash
外,
您需要进入 catkin 工作区才能 catkin_make
工作。我建议您使用 catkin build
(不同的工作空间)而不是 catkin_make
(旧版本的工作空间),您可以指定工作空间文件夹。
我正在创建一个 docker 容器来执行 ROS 包。
FROM ros:melodic
COPY . /rosdata
WORKDIR /rosdata
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && chmod +x setupROS.sh && bash -c "./setupROS.sh"
这个设置脚本可能比调试尝试需要的更加臃肿,目前看起来像这样:
#!/bin/sh
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y wget apt-utils
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | apt-key add -
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y ros-melodic-pcl-conversions ros-melodic-pcl-ros
apt-get update
DEBIAN_FRONTEND=noninteractive rosdep install --as-root apt:false --from-paths src --ignore-src --rosdistro melodic -y
DEBIAN_FRONTEND=noninteractive catkin_make
一切似乎都很好,直到最后一个命令失败
./setupROS.sh: line 10: catkin_make: command not found
如果我在 shellscript 中注释掉最后一条命令,只会自动 运行 前面的指令,然后打开一个交互式会话 (docker 运行 -it) 和 运行 这个 catkin_make 手动,它按预期工作。 我是否在此行中包含 DEBIAN_FRONTEND 变量没有区别。
在从 Dockerfile 调用的脚本中 运行 时 catkin_make 失败的原因是什么,但在手动 运行 时却没有?
根据我的经验,当我们 运行 行源 /opt/ros/melodic/setup.bash
时,catkin_make
被添加到路径中。通常,此行会在安装结束时添加到 .bashrc
。也许您 运行 在其中设置脚本的环境不会继承相同的 PATH
(类似于当您 运行 使用 sudo 时)。我建议只将 source /opt/ros/melodic/setup.bash
行添加到您的脚本中,看看是否有帮助。
除了@Vik 回答:
除了在 .bashrc
或 sh
文件中采购 /opt/ros/melodic/setup.bash
外,
您需要进入 catkin 工作区才能 catkin_make
工作。我建议您使用 catkin build
(不同的工作空间)而不是 catkin_make
(旧版本的工作空间),您可以指定工作空间文件夹。