You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:06:16