无法在Dockerfile中使用* RUN *执行* catkin *命令

桑杰

我想在docker上使用自定义的ros-indigo。我准备了以下Dockerfile

FROM ros:indigo-robot

RUN echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
RUN mkdir -p /home/catkin_ws/src
WORKDIR /home/catkin_ws/src
RUN catkin_init_workspace
WORKDIR /home/catkin_ws
RUN catkin_make
RUN echo "source /home/catkin_ws/devel/setup.bash" >> ~/.bashrc

但是,这在RUN catkin_init_workspaceRUN catkin_make上都引发了错误,提示

/bin/sh: catkin_make: command not found
The command '/bin/sh -c catkin_init_workspace' returned a non-zero code: 127

出人意料的是,它成功地建立,如果我改变运行CMD柳絮命令,即以下Dockerfile建立就好了

RUN echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
RUN mkdir -p /home/catkin_ws/src
WORKDIR /home/catkin_ws/src
CMD catkin_init_workspace
WORKDIR /home/catkin_ws
CMD catkin_make
RUN echo "source /home/catkin_ws/devel/setup.bash" >> ~/.bashrc

更令人惊讶的是,这些catkin命令可在单独构建在任何ros-indigo图像之上的容器上完美运行

这清楚地表明,RUN不是调用catkin命令的适当方法,或者我不正确地调用了它。

现在,由于CMD命令的性质不同于RUN命令,因此在我的情况下使用它是没有意义的。因此,如果有人能指出正确的方法,我将不胜感激。

阿拉萨内·恩迪亚耶(Alassane Ndiaye)

您需要为命令运行设置适当的bash环境(默认情况下,Docker使用sh执行命令)。这些命令对我有用:

FROM ros:indigo-robot

RUN echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
RUN mkdir -p /home/catkin_ws/src
WORKDIR /home/catkin_ws/src
#RUN /opt/ros/indigo/bin/catkin_init_workspace
RUN /bin/bash -c '. /opt/ros/indigo/setup.bash; catkin_init_workspace /home/catkin_ws/src'

WORKDIR /home/catkin_ws
RUN /bin/bash -c '. /opt/ros/indigo/setup.bash; cd /home/catkin_ws; catkin_make'
RUN echo "source /home/catkin_ws/devel/setup.bash" >> ~/.bashrc

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

找不到Catkin命令

执行通常包含 '\;' 的 tmux 命令 使用 subprocess.run

dockerfile中的docker run命令仅在未在cli上指定命令时才执行

在Windows和Linux上的Dockerfile中使用RUN命令

无法在solaris中使用find语句执行命令

无法在php中使用exec()执行命令

当将/ bin / bash命令附加到docker run -it IMAGE ID后,为什么不执行Dockerfile中的命令?

在pi上使用RPLIDAR A2在catkin_make命令上出错HectorSLAM

如何使用“&”创建Dockerfile到RUN命令?

Docker-无法从同一个.sh文件执行多个docker run命令

Docker:从头开始时,无法在添加后执行RUN命令

在go编译器中使用run命令时,可执行文件会如何处理?

Docker-使用RUN(ERROR 2002)在Dockerfile中使用MySQL命令

尝试使用 Eclipse 调试 GNU 项目时出现“无法执行 MI 命令:-exec-run”错误

子进程使用 gulp-run 执行命令任务时发生错误

如何使用docker run命令执行ps1脚本?

在Python中使用参数执行bash命令

在Python中使用管道执行Shell命令

在结构执行命令中使用密码

执行bash脚本中使用的命令

在Python中使用管道执行Shell命令

在执行的命令中使用BASH脚本变量

在 Linux 中使用 python 执行 Shell 命令

Dockerfile RUN合并pip命令

我如何告诉我的Dockerfile在docker-compose的RUN命令中使用哪个DNS?

无法从Java执行Linux命令

无法执行ffprobe命令

无法执行 makemigrations 命令

触摸命令无法正常执行