我开发了一些ROS软件包,我想把软件包放在一个docker容器中,因为一直安装所有的ROS软件包很繁琐。因此,我创建了一个使用基本ROS映像的dockerfile
,安装了所有必需的依赖项,复制了我的工作区,在docker容器中构建了工作区,然后获取了所有内容。你可以在这里找到docker文件:
FROM ros:kinetic-ros-base
RUN apt-get update && apt-get install locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
RUN apt-get update && apt-get install -y \
&& rm -rf /var/likb/apt/lists/*
COPY . /catkin_ws/src/
WORKDIR /catkin_ws
RUN /bin/bash -c '. /opt/ros/kinetic/setup.bash; catkin_make'
RUN /bin/bash -c '. /opt/ros/kinetic/setup.bash; source devel/setup.bash'
CMD ["roslaunch", "master_launch sim_perception.launch"]
问题是:当我使用“运行”命令运行docker容器时,docker似乎不知道我采购了我的新ROS工作区,因此它无法自动启动我的启动脚本。如果我使用“run -it bash”作为bash脚本运行docker容器,我可以再次获取我的工作区,然后roslaunch
我的.launch
文件。
那么有人可以告诉我如何正确编写我的dockerfile
所以当我运行容器时我自动启动我的.launch
文件?谢谢!
来自Docker Docs
每个RUN指令都是独立运行的,不会影响下一条指令,所以当你运行最后一行时,没有从ROS中保存PATH。
您首先需要使用.bashrc
来源source
或所需的每个环境。
您可以将所需的所有内容(源命令和roslaunch命令)包装在sh
文件中,然后在最后运行该文件