Docker部署OpenClaw时的常见问题及解决方案
| 问题类型 | 优先查看 | 难度 | 预计时间 |
|---|---|---|---|
| Docker无法安装 | 系统检查 | ⭐ | 3分钟 |
| 容器无法启动 | 日志排查 | ⭐⭐ | 5分钟 |
| 无法访问服务 | 网络排查 | ⭐⭐ | 5分钟 |
| 数据丢失 | 持久化检查 | ⭐⭐⭐ | 10分钟 |
| 内存占用过高 | 资源限制 | ⭐⭐ | 5分钟 |
| 更新失败 | 更新排查 | ⭐⭐ | 5分钟 |
| 权限错误 | 权限排查 | ⭐⭐ | 3分钟 |
A: 按照以下步骤排查:
# 查看系统版本
cat /etc/os-release要求:
- Ubuntu: 18.04+
- CentOS: 7+
- Debian: 10+
❌ 如果版本过低,升级系统或使用其他安装方式
# Ubuntu/Debian
sudo apt remove docker docker-engine docker.io containerd runc
# CentOS/RHEL
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 验证清理
docker --version 2>&1 || echo "Docker not found"# 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 查看脚本内容(可选)
# cat get-docker.sh
# 运行安装脚本
sudo sh get-docker.sh
# 验证安装
docker --version
docker-compose version✅ 成功输出: Docker version 24.x.x, Docker Compose version 2.x.x
A: 常见原因和解决方案:
| 原因 | 解决方案 |
|---|---|
| 权限不足 | sudo systemctl start docker |
| 端口被占用 | 检查并停止占用端口的进程 |
| 配置文件错误 | 检查 /etc/docker/daemon.json |
# 启动Docker服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 查看服务状态
sudo systemctl status docker# 查看Docker服务日志
sudo journalctl -u docker -f
# 查看错误日志
sudo journalctl -u docker -p errA: 将用户添加到docker组:
# 将当前用户添加到docker组
sudo usermod -aG docker $USER
# 重新登录或使用newgrp
newgrp docker
# 验证权限
docker ps✅ 成功标志: 可以运行docker命令而不需要sudo
A: 按照以下步骤排查:
# 查看所有容器(包括停止的)
docker ps -a
# 查看特定容器
docker ps -a | grep openclaw# 查看容器日志
docker logs openclaw
# 实时查看日志
docker logs -f openclaw
# 查看最近100行
docker logs --tail 100 openclaw# 查看容器退出代码
docker inspect openclaw | grep ExitCode
# 常见退出代码:
# 0 = 正常退出
# 1 = 错误退出
# 125 = Docker daemon错误
# 126 = 命令不可执行
# 127 = 命令未找到
# 137 = 信号杀死(SIGKILL)
# 139 = 段错误(SIGSEGV)# 重启容器
docker restart openclaw
# 如果无法重启,删除并重新创建
docker stop openclaw
docker rm openclaw
docker run -d \
--name openclaw \
--restart unless-stopped \
-p 18789:18789 \
openclaw/openclaw:latestA: 常见原因和解决方案:
| 原因 | 解决方案 |
|---|---|
| 内存不足 | 增加内存限制或升级服务器 |
| 配置文件错误 | 检查 openclaw.json 语法 |
| 健康检查失败 | 修改健康检查配置 |
| API Key错误 | 更新API Key |
# 查看容器重启次数
docker inspect openclaw | grep RestartCount
# 查看最后重启时间
docker inspect openclaw | grep RestartedAt# 启动容器(增加内存限制)
docker run -d \
--name openclaw \
--memory="2g" \
--memory-swap="2g" \
--restart unless-stopped \
-p 18789:18789 \
openclaw/openclaw:latestA: 查看和限制CPU使用:
# 查看容器资源使用
docker stats openclaw
# 查看详细信息
docker inspect openclaw | grep -i cpu# 启动容器(限制CPU)
docker run -d \
--name openclaw \
--cpus="1" \
--restart unless-stopped \
-p 18789:18789 \
openclaw/openclaw:latest
# 更新运行中容器的CPU限制
docker update --cpus="1" openclawA: 按照以下步骤排查:
# 查看容器状态
docker ps | grep openclaw❌ 如果容器未运行,启动容器:
docker start openclaw# 查看端口映射
docker port openclaw
# 查看详细信息
docker inspect openclaw | grep -A 10 PortBindings✅ 预期输出: 18789/tcp -> 0.0.0.0:18789
# 在服务器上测试本地访问
curl http://localhost:18789
# 或使用容器IP
docker inspect openclaw | grep IPAddress
curl http://<CONTAINER_IP>:18789# 检查防火墙状态
sudo ufw status
# 允许端口
sudo ufw allow 18789/tcp
# 或临时禁用防火墙测试
sudo ufw disable阿里云:
- 登录阿里云控制台
- 进入「云服务器ECS」→「安全组」
- 检查端口18789是否开放
腾讯云:
- 登录腾讯云控制台
- 进入「云服务器」→「安全组」
- 检查端口18789是否开放
AWS:
- 登录AWS控制台
- 进入「EC2」→「Security Groups」
- 检查端口18789是否开放
# 测试服务器IP
ping YOUR_SERVER_IP
# 测试端口
nc -zv YOUR_SERVER_IP 18789
# 或
telnet YOUR_SERVER_IP 18789A: 检查Docker网络配置:
# 查看网络列表
docker network ls
# 查看默认网络
docker network inspect bridge
# 查看容器网络
docker inspect openclaw | grep -A 10 Networks# 在容器中测试DNS
docker exec openclaw nslookup google.com
# 或使用ping
docker exec openclaw health -c 4 8.8.8.8方式1: 使用主机DNS
# 启动容器(使用主机DNS)
docker run -d \
--name openclaw \
--dns 8.8.8.8 \
--dns 8.8.4.4 \
-p 18789:18789 \
openclaw/openclaw:latest方式2: 使用Docker网络
# 创建自定义网络
docker network create --driver bridge openclaw-network
# 启动容器(使用自定义网络)
docker run -d \
--name openclaw \
--network openclaw-network \
--dns 8.8.8.8 \
-p 18789:18789 \
openclaw/openclaw:latestA: 检查volume挂载:
# 查看容器挂载
docker inspect openclaw | grep -A 20 Mounts✅ 预期输出:
"Mounts": [
{
"Type": "volume",
"Source": "/home/user/data",
"Destination": "/home/openclaw/.openclaw",
...
}
]# 创建数据目录
mkdir -p data
# 启动容器(挂载数据)
docker run -d \
--name openclaw \
-v $(pwd)/data:/home/openclaw/.openclaw \
-p 18789:18789 \
openclaw/openclaw:latest
# 验证挂载
docker inspect openclaw | grep Mounts -A 20A: 恢复数据或检查备份:
# 查看所有volume
docker volume ls
# 查看特定volume
docker volume inspect openclaw-data# 如果有备份,解压备份
tar -xzf backups/backup-20260222.tar.gz
# 重新创建容器并挂载恢复的数据
docker run -d \
--name openclaw \
-v $(pwd)/data:/home/openclaw/.openclaw \
-p 18789:18789 \
openclaw/openclaw:latest# 在容器中查看数据
docker exec openclaw ls -la /home/openclaw/.openclaw
# 复制数据到宿主机
docker cp openclaw:/home/openclaw/.openclaw ./backup-dataA: 查看和优化内存使用:
# 查看容器资源使用
docker stats openclaw
# 查看详细信息
docker inspect openclaw | grep -i memory# 启动容器(限制内存)
docker run -d \
--name openclaw \
--memory="2g" \
--memory-swap="2g" \
--restart unless-stopped \
-p 18789:18789 \
openclaw/openclaw:latest
# 更新运行中容器的内存限制
docker update --memory="2g" openclaw# 启动容器(限制日志大小)
docker run -d \
--name openclaw \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
-p 18789:18789 \
openclaw/openclaw:latestA: 清理Docker数据:
# 查看Docker磁盘使用
docker system df
# 查看详细使用情况
docker system df -v# 清理未使用的镜像
docker image prune -a
# 清理未使用的容器
docker container prune
# 清理未使用的volume
docker volume prune
# 清理所有未使用的资源
docker system prune -a# 清理容器日志
docker logs openclaw --tail 0
# 或手动清理
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/openclaw-json.log*"A: 优化措施:
# 启动容器(限制资源)
docker run -d \
--name openclaw \
--cpus="2" \
--memory="2g" \
--pids-limit 100 \
-p 18789:18789 \
openclaw/openclaw:latestversion: '3.8'
services:
redis:
image: redis:alpine
container_name: redis
command: redis-server --appendonly yes
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379编辑 /etc/docker/daemon.json`:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true
}重启Docker:
sudo systemctl restart dockerA: 使用非root用户:
# 启动容器(使用非root用户)
docker run -d \
--name openclaw \
-u 1000:1000 \
-p 18789:18789 \
openclaw/openclaw:latestA: 使用环境变量或secret:
# 创建.env文件
cat > .env << 'EOF'
OPENCLAW_API_KEY=YOUR_API_KEY
OPENCLAW_PASSWORD=YOUR_PASSWORD
EOF
# 设置权限
chmod 600 .env
# 启动容器(使用环境变量)
docker run -d \
--name openclaw \
--env-file .env \
-p 18789:18789 \
openclaw/openclaw:latestA: 按照以下步骤排查:
# 测试Docker Hub连接
ping registry-1.docker.io
# 或使用curl
curl -I https://registry-1.docker.io/v2/# 拉取最新镜像
docker pull openclaw/openclaw:latest
# 查看镜像
docker images | grep openclaw# 清理旧镜像
docker rmi openclaw/openclaw:old-tag
# 或清理所有未使用的镜像
docker image prune -a# 停止并删除旧容器
docker stop openclaw
docker rm openclaw
# 启动新容器
docker run -d \
--name openclaw \
--restart unless-stopped \
-p 18789:18789 \
-v $(pwd)/data:/home/openclaw/.openclaw \
openclaw/openclaw:latestA: 检查数据权限和格式:
# 查看数据目录权限
ls -la data/
# 修复权限
sudo chown -R 1000:1000 data/# 检查配置文件格式
docker run --rm \
-v $(pwd)/data:/data \
openclaw/openclaw:latest \
cat /data/openclaw.json | python3 -m json.tool# 备份旧数据
docker cp old-openclaw:/home/openclaw/.openclaw ./backup-data
# 启动新容器并挂载数据
docker run -d \
--name openclaw \
-v $(pwd)/backup-data:/home/openclaw/.openclaw \
-p 18789:18789 \
openclaw/openclaw:latestA:
# 查看容器日志
docker logs openclaw
# 实时查看日志
docker logs -f openclaw
# 查看最近N行
docker logs --tail 100 openclaw
# 查看特定时间的日志
docker logs --since 2024-02-22T10:00:00 openclaw# 查看Docker服务日志
sudo journalctl -u docker -f
# 查看错误日志
sudo journalctl -u docker -p errA: 收集诊断信息:
# 收集系统信息
echo "=== System Information ==="
uname -a
docker --version
docker-compose version
echo ""
echo "=== Docker Information ==="
docker info
echo ""
echo "=== Container Information ==="
docker ps -a
docker stats --no-stream
echo ""
echo "=== Network Information ==="
docker network ls
echo ""
echo "=== Volume Information ==="
docker volume ls
echo ""
echo "=== Container Logs ==="
docker logs --tail 50 openclawA:
| 资源 | 链接 |
|---|---|
| Docker文档 | https://docs.docker.com/ |
| Docker论坛 | https://forums.docker.com/ |
| OpenClaw文档 | https://docs.openclaw.ai |
| OpenClaw社区 | https://discord.com/invite/clawd |
- 💬 Discord社区 - 实时讨论
- 📋 GitHub Issues - 问题报告
- 🔍 Stack Overflow - Docker相关问题
A:
# 收集诊断信息
docker info > docker-info.txt
docker ps -a > docker-ps.txt
docker logs --tail 100 openclaw > docker-logs.txt- 访问 GitHub Issues
- 填写问题描述
- 附上诊断信息文件
- 说明复现步骤
创建时间: 2026-02-22 最后更新: 2026-02-22 版本: 1.0 适用版本: Docker 20.10+