openclaw docker容器持续重启的根本原因是主进程未前台驻留或启动失败。需检查docker logs --tail 50输出、entrypoint/cmd是否指向阻塞式前台命令(如tail -f /dev/null)、依赖端口与服务(redis等)是否就绪,避免service/systemctl后台启动导致静默退出。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw Docker容器持续重启,说明容器启动后立即崩溃退出,根本原因通常是主进程未保持前台运行或关键服务启动失败。
确认容器崩溃日志
执行 docker logs --tail 50 openclaw 查看最近50行输出,重点找最后一行错误——比如 exec: "start.sh": executable file not found in $PATH 或 Permission denied 这类提示直接暴露缺失文件或权限问题。
如果日志为空或只有“Started”就中断,说明主进程秒退,此时必须检查容器的 ENTRYPOINT/CMD 是否指向一个能长期存活的前台命令。
检查主进程是否前台运行
OpenClaw 官方镜像通常依赖 start.sh 或 main.py 启动,但若该脚本末尾没有阻塞逻辑(如 tail -f /dev/null、sleep infinity 或服务进程前台挂起),容器就会在脚本执行完后立刻退出 → Docker 认为任务完成,自动终止容器并按 restart policy 重启。
进入容器临时调试:docker run -it --rm --entrypoint /bin/sh openclaw:latest,然后手动执行启动脚本,观察是否立即返回 shell。如果是,证明脚本没做前台驻留处理。
【关键前提】 容器内必须有且仅有一个前台主进程,不能靠 service start 或 systemctl start 启动后台服务——Docker 不支持 systemd,这类调用会静默失败。
修复启动脚本或覆盖 CMD
方法一:挂载修正后的启动脚本
准备一个带阻塞逻辑的 fixed-start.sh:
#!/bin/sh<br>python3 /app/main.py &<br>wait -n
赋权并挂载:chmod +x fixed-start.sh && docker run -v $(pwd)/fixed-start.sh:/app/start.sh openclaw:latest
方法二:直接覆盖 CMD(无需改镜像)
docker run -d --name openclaw \<br> -e PYTHONUNBUFFERED=1 \<br> --restart unless-stopped \<br> openclaw:latest \<br> sh -c 'python3 /app/main.py && tail -f /dev/null'
注意:最后的 tail -f /dev/null 是必须的,否则 Python 进程退出后容器立即终止。
验证 SSH 或其他依赖服务是否就绪
第一步:确认容器内 OpenClaw 所需的依赖端口(如 8000、6379)没有被其他进程占用,执行 netstat -tuln | grep -E '8000|6379';若显示 Address already in use,说明端口冲突导致主程序抛异常退出。
第二步:检查 Redis、PostgreSQL 等外部依赖是否已启动且网络可达。OpenClaw 默认连接 redis://redis:6379,若你没启动名为 redis 的容器或没配置自定义网络,Python 连接超时会触发未捕获异常 → 主进程崩溃。
第三步:若容器内需 SSH 调试,确保 /etc/ssh/sshd_config 中 UsePrivilegeSeparation no 和 UsePAM no 已设置,否则 /usr/sbin/sshd -D 会因权限模型不兼容而退出,连带拖垮整个容器。











