我正在创建一个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:第10行:catkin_make:找不到命令
如果我注释掉shellscript中的最后一条命令,则仅自动运行前面的指令,然后打开一个交互式会话(docker run -it)并手动运行此catkin_make,它会按预期工作。 我是否在这一行中包含DEBIAN_FRONTEND变量都没有区别。
catkin_make在从Dockerfile调用的脚本中运行而不是手动运行时失败的原因可能是什么?
答案 0 :(得分:2)
根据我的经验,当我们运行行source /opt/ros/melodic/setup.bash时,catkin_make被添加到路径中。通常,此行在安装结束时添加到.bashrc中。也许您在其中运行脚本的环境没有继承相同的PATH(类似于以sudo运行事物时的环境)。我建议只在脚本中添加source /opt/ros/melodic/setup.bash
行,看看是否有帮助。
答案 1 :(得分:0)
除了@Vik答案:
在/opt/ros/melodic/setup.bash
或.bashrc
文件中寻找sh
之外,
您需要位于catkin工作区中才能进行catkin_make
工作。建议您使用catkin build
(不同的工作空间),而不要使用catkin_make
(旧版本的工作空间)来指定工作空间文件夹。