Docker+VSCode运行ROS项目遇容器重启报错,求解决方案
回答
核心原因
容器反复重启的直接原因是entrypoint脚本执行完毕后立即退出,导致容器的PID 1进程终止,而restart: always配置会让Docker不断重启容器。另外脚本开头的set -e会让任何命令失败时直接退出,比如如果/catkin_ws/devel/setup.bash不存在,整个脚本会立刻终止。
修复方案
1. 修改entrypoint脚本
让脚本完成初始化后保持运行,同时处理可能的初始化错误:
#!/usr/bin/env bash # 使用set -euo pipefail增强错误检测,但添加容错处理 set -euo pipefail # 加载ROS环境,失败则提示并继续 if ! source "/opt/ros/noetic/setup.bash"; then echo "警告:加载ROS环境失败" fi # rospack list可能在工作空间未构建时失败,忽略错误 rospack list || true # 加载catkin工作空间环境,不存在则跳过 if [ -f "/catkin_ws/devel/setup.bash" ]; then source "/catkin_ws/devel/setup.bash" else echo "警告:未找到catkin工作空间setup文件,跳过加载" fi # 执行docker-compose中指定的命令,保持容器运行 exec "$@"
2. 验证配置
你的workspace服务已经设置了command: sleep infinity,修改entrypoint后,exec "$@"会执行这个命令,让容器保持运行。如果entrypoint是镜像内置的,需要重新构建镜像:
docker build -t ship .
3. 重启并检查容器
# 停止并删除现有容器 docker-compose down # 启动服务 docker-compose up -d # 查看容器状态 docker-compose ps
额外排查
- 如果容器还是重启,查看容器日志定位具体错误:
docker-compose logs workspace
- 确保
/catkin_ws目录存在且有正确权限,或者先在容器内执行catkin_make构建工作空间。
内容的提问来源于stack exchange,提问作者nag92
相关产品推荐
相关产品推荐

