openclaw容器启动失败主因是内部关键服务未就绪,如ssh未前台运行、端口被占、配置路径错误或健康检查失败;需通过docker ps -a查状态、docker logs看报错,并重点验证sshd进程、密钥权限、监听地址及端口映射。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw部署后容器启动失败,通常不是镜像拉取失败或命令写错这种表层问题,而是容器内关键服务(如SSH、Web服务、数据库)未按预期就绪导致的退出——比如sshd前台没跑起来、端口被占、配置文件路径错误,或者容器一启动就因健康检查失败被docker kill。
确认容器是否真在运行
执行 docker ps -a | grep openclaw,看 STATUS 列是不是 exited 或 restarting。如果显示 Up 10 seconds 后立刻变成 Exited (1),说明容器启动后几秒内就崩溃了,必须查日志。
运行 docker logs --tail 50 openclaw(把 openclaw 替换成你的容器名或ID),重点找最后一行报错:Permission denied、Address already in use、No such file or directory、Failed to start ssh.service 这类关键词。
排查SSH服务未就绪(最常见原因)
OpenClaw依赖SSH提供远程调试入口,但很多基础镜像默认不装 openssh-server,或装了却没启动。
方法一:进容器手动验证SSH进程
执行 docker exec -it openclaw /bin/bash,然后运行 ps aux | grep sshd。如果没有任何 sshd 进程,说明服务根本没跑起来。
方法二:检查SSH是否已安装且可执行
在容器内运行 which sshd。若返回空,说明 openssh-server 没装;若返回 /usr/sbin/sshd,再运行 /usr/sbin/sshd -t 验证配置语法——【这一步必须成功,否则容器启动时sshd直接退出】。
方法三:强制前台启动sshd(绕过systemd)
不要用 service ssh start 或 systemctl start ssh,Alpine/Debian slim 镜像通常没 systemd。改用 /usr/sbin/sshd -D -e,-D 表示前台阻塞运行,-e 把错误日志打到终端,这样容器就不会立即退出。
本次更新实现飞书插件 npm 独立分发,新增 Ollama 本地模型配置及 openclaw 命令别名。引入 SQLite 持久化队列,支持断点续传。全面集成飞书、钉钉、企业微信及 QQ 官方渠道,优化阿里云百炼模型选择。修复多 Agent 路由、定时任务校验及配对授权等关键问题,提升系统稳定性与兼容性。
检查端口映射与监听状态
第一步:确认 docker run 命令中是否显式指定了 -p 映射
错误写法:docker run -p 22 openclaw → 这会把容器22端口随机映射到宿主机某个高端口,你根本不知道连哪;
正确写法:docker run -p 2222:22 openclaw → 宿主机2222端口才真正通向容器22端口。
第二步:进容器查sshd实际监听地址
执行 docker exec openclaw netstat -tlnp | grep :22,输出必须含 0.0.0.0:22 或 *:22;如果只看到 127.0.0.1:22,说明sshd只绑本地回环,外部连不上——需修改 /etc/ssh/sshd_config 中的 ListenAddress 为 0.0.0.0。
第三步:查宿主机防火墙是否放行该端口
运行 sudo ufw status | grep 2222(Ubuntu)或 sudo iptables -L -n | grep :2222(CentOS),没看到对应规则就得加:sudo ufw allow 2222。
修复主机密钥缺失问题
OpenSSH启动时强制要求四类主机密钥文件存在且权限正确,缺一不可:
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
(旧版本还可能需要 /etc/ssh/ssh_host_dsa_key)
如果日志里出现 Could not load host key 或 Failed to load host key,说明密钥没生成。
执行以下命令重建密钥:
ssh-keygen -A -f /etc/ssh/ && chmod 600 /etc/ssh/ssh_host_*_key && chown root:root /etc/ssh/ssh_host_*_key
【chmod 600 是硬性要求,权限大于600(如644)会导致sshd拒绝启动】
验证容器健康检查是否误判
有些OpenClaw镜像内置 HEALTHCHECK,比如 curl -f http://localhost:8080/health 会返回非200就标记 unhealthy 并触发重启。
先停掉健康检查干扰:docker run --no-healthcheck ... openclaw
再单独测试服务是否真能响应:
docker exec openclaw curl -I http://localhost:8080/health —— 如果返回 000 或 connection refused,说明Web服务根本没起来,得查对应进程(如 gunicorn、uvicorn)是否启动、端口是否冲突、配置文件路径是否写错。









