在 Docker 容器启动时启动 "roscore" 然后 "rosrun ...." 的最佳做法是什么?
What is the best practice to start "roscore" followed by "rosrun ...." on Docker Container startup?
我通过 Docker 文件创建了一个 Docker 图像,其中正确安装了 Ubuntu 18.04 和 ROS Melodic。请注意,我没有使用 official ROS-Docker image 创建我的 Docker 图像。
从这个 Docker 图像派生的 Docker 容器工作正常。
但是,每次我想使用容器时,我都需要执行以下命令:
- 航站楼 window:
docker run -d -it --name container_name docker_image; docker exec -it container_name bash
然后,在我进入 Docker 容器之后:
roscore
- 航站楼 window:
docker exec -it container_name bash
然后,在我进入 Docker 容器之后:
rosrun ROS_PackageName PythonScript.py
请注意,通过上述Docker命令,两个终端在相同 Docker容器中运行。
我发现我的启动方式 PythonScript.py 效率低下。
因此,我想寻求最佳实践,在 Docker 容器启动时启动“roscore”,然后启动“rosrun ....”。
在某些 Docker 文件中,我在文件末尾看到命令 ENTRYPOINT
以及 CMD
。
但是,我不知道这些命令是否可以帮助我让我的 Docker 容器在容器启动时先执行“roscore”,然后再执行“rosrun”。
这实际上是 roslaunch 的部分用途。它使启动多个节点和更好的参数输入变得更容易,但它会 也会 启动一个 roscore
是一个尚未 运行。在您的示例中,它看起来像这样:
<launch>
<node pkg="ROS_PackageName" type="PythonScript.py" name="my_node_name" output="screen" >
</node>
</launch>
当通过 CLI 运行 roslaunch
时,您可以像 rosrun
一样使用它。例如,如果您在列出的同一个示例包中创建启动文件并将文件命名为 my_launch.launch
,命令将如下所示:roslaunch ROS_PackageName my_launch.launch
。只需用这个替换上面的 rosrun
命令。
我通过 Docker 文件创建了一个 Docker 图像,其中正确安装了 Ubuntu 18.04 和 ROS Melodic。请注意,我没有使用 official ROS-Docker image 创建我的 Docker 图像。
从这个 Docker 图像派生的 Docker 容器工作正常。 但是,每次我想使用容器时,我都需要执行以下命令:
- 航站楼 window:
docker run -d -it --name container_name docker_image; docker exec -it container_name bash
然后,在我进入 Docker 容器之后:
roscore
- 航站楼 window:
docker exec -it container_name bash
然后,在我进入 Docker 容器之后:
rosrun ROS_PackageName PythonScript.py
请注意,通过上述Docker命令,两个终端在相同 Docker容器中运行。
我发现我的启动方式 PythonScript.py 效率低下。 因此,我想寻求最佳实践,在 Docker 容器启动时启动“roscore”,然后启动“rosrun ....”。
在某些 Docker 文件中,我在文件末尾看到命令 ENTRYPOINT
以及 CMD
。
但是,我不知道这些命令是否可以帮助我让我的 Docker 容器在容器启动时先执行“roscore”,然后再执行“rosrun”。
这实际上是 roslaunch 的部分用途。它使启动多个节点和更好的参数输入变得更容易,但它会 也会 启动一个 roscore
是一个尚未 运行。在您的示例中,它看起来像这样:
<launch>
<node pkg="ROS_PackageName" type="PythonScript.py" name="my_node_name" output="screen" >
</node>
</launch>
当通过 CLI 运行 roslaunch
时,您可以像 rosrun
一样使用它。例如,如果您在列出的同一个示例包中创建启动文件并将文件命名为 my_launch.launch
,命令将如下所示:roslaunch ROS_PackageName my_launch.launch
。只需用这个替换上面的 rosrun
命令。