OpenClaw Docker 部署指南:容器化部署最佳实践
OpenClaw Docker 部署指南:容器化部署最佳实践
Docker 是现代应用部署的标准方式,OpenClaw 完全支持 Docker 部署。通过 Docker,你可以快速、可靠地部署 OpenClaw,实现环境一致性、简化运维管理。本文将详细介绍如何使用 Docker 部署 OpenClaw,从基础配置到高级优化。
为什么选择 Docker 部署?
Docker 的优势
| 优势 | 说明 |
|---|---|
| 环境一致性 | 开发、测试、生产环境完全一致 |
| 快速部署 | 一键启动,无需繁琐配置 |
| 资源隔离 | 容器间相互隔离,互不影响 |
| 易于迁移 | 跨平台部署,轻松迁移 |
| 版本管理 | 镜像版本化,回滚方便 |
| 可扩展性 | 配合编排工具轻松扩展 |
Docker vs 传统部署
| 维度 | Docker | 传统部署 |
|---|---|---|
| 部署速度 | 分钟级 | 小时级 |
| 环境配置 | 自动化 | 手动配置 |
| 依赖管理 | 镜像内置 | 需单独安装 |
| 扩展性 | 简单 | 复杂 |
| 回滚 | 镜像切换 | 重新部署 |
安装 Docker
Linux (Ubuntu/Debian)
# 安装 Docker
curl -fsSL https://get.docker.com | sh
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 添加当前用户到 docker 组(可选)
sudo usermod -aG docker $USER
# 验证安装
docker --version
docker compose version
macOS
# 安装 Docker Desktop
brew install --cask docker
# 启动 Docker Desktop 应用
open /Applications/Docker.app
Windows
下载并安装 Docker Desktop for Windows。
OpenClaw Docker 部署
方式一:Docker Compose(推荐)
1. 创建项目目录
mkdir -p ~/openclaw
cd ~/openclaw
2. 创建配置文件
docker-compose.yml
version: '3.8'
services:
# OpenClaw 主服务
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
# 从 .env 文件读取
- LLM__PROVIDER=${LLM_PROVIDER:-openai}
- LLM__API_KEY=${LLM_API_KEY}
- LLM__MODEL=${LLM_MODEL:-gpt-4}
- ADMIN_USER_IDS=${ADMIN_USER_IDS}
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-}
- FEISHU_APP_ID=${FEISHU_APP_ID:-}
- FEISHU_APP_SECRET=${FEISHU_APP_SECRET:-}
volumes:
# 配置文件
- ./config:/app/config:ro
# 数据持久化
- ./data:/app/data
# 日志
- ./logs:/app/logs
networks:
- openclaw-network
depends_on:
- redis
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Redis 缓存服务
redis:
image: redis:7-alpine
container_name: openclaw-redis
restart: unless-stopped
volumes:
- redis-data:/data
networks:
- openclaw-network
command: redis-server --appendonly yes
# Nginx 反向代理(可选)
nginx:
image: nginx:alpine
container_name: openclaw-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
networks:
- openclaw-network
depends_on:
- openclaw
networks:
openclaw-network:
driver: bridge
volumes:
redis-data:
.env 文件
# LLM 配置
LLM_PROVIDER=openai
LLM_API_KEY=sk-your-api-key
LLM_MODEL=gpt-4
# 管理员
ADMIN_USER_IDS=123456789
# Telegram(可选)
TELEGRAM_BOT_TOKEN=
# Discord(可选)
DISCORD_BOT_TOKEN=
# 飞书(可选)
FEISHU_APP_ID=
FEISHU_APP_SECRET=
config/app.yaml
app:
name: "OpenClaw"
port: 3000
host: "0.0.0.0"
llm:
provider: "${LLM_PROVIDER}"
model: "${LLM_MODEL}"
apiKey: "${LLM_API_KEY}"
plugins:
- telegram
- discord
memory:
enabled: true
type: "redis"
redis:
host: "redis"
port: 6379
3. 启动服务
# 启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f openclaw
# 查看服务状态
docker compose ps
方式二:Docker 单容器
# 拉取镜像
docker pull openclaw/openclaw:latest
# 运行容器
docker run -d \
--name openclaw \
--restart unless-stopped \
-p 3000:3000 \
-e LLM_API_KEY=your-api-key \
-e ADMIN_USER_IDS=123456789 \
-v $(pwd)/config:/app/config \
-v $(pwd)/data:/app/data \
openclaw/openclaw:latest
高级配置
使用自定义镜像
Dockerfile
FROM openclaw/openclaw:latest
# 安装额外依赖
RUN npm install some-package
# 复制自定义配置
COPY custom-config /app/custom-config
# 设置环境变量
ENV CUSTOM_VAR=value
# 启动命令
CMD ["node", "dist/index.js"]
构建自定义镜像:
docker build -t my-openclaw:latest .
多阶段构建
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "dist/index.js"]
Docker Compose 生产配置
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:${VERSION:-latest}
container_name: openclaw
restart: unless-stopped
# 资源限制
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.5'
memory: 512M
# 安全配置
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
# 网络配置
networks:
- openclaw-network
# 日志配置
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
GPU 支持
如果需要 GPU 加速(如本地 LLM):
services:
openclaw:
image: openclaw/openclaw:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
Nginx 反向代理配置
基础配置
nginx/nginx.conf
events {
worker_connections 1024;
}
http {
upstream openclaw {
server openclaw:3000;
}
server {
listen 80;
server_name example.com;
# 重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# 反向代理
location / {
proxy_pass http://openclaw;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
}
数据管理
数据卷管理
# 查看数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect openclaw_redis-data
# 备份数据卷
docker run --rm -v openclaw_redis-data:/data -v $(pwd):/backup alpine tar czf /backup/redis-backup.tar.gz /data
# 恢复数据卷
docker run --rm -v openclaw_redis-data:/data -v $(pwd):/backup alpine tar xzf /backup/redis-backup.tar.gz -C /
日志管理
# 查看实时日志
docker compose logs -f openclaw
# 查看最近 100 行日志
docker compose logs --tail=100 openclaw
# 导出日志
docker compose logs openclaw > openclaw.log
监控与运维
健康检查
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
监控集成
Prometheus 配置
# docker-compose.yml 添加
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
自动重启策略
restart: unless-stopped # 除非手动停止,否则自动重启
# 或
restart: always # 总是重启
# 或
restart: on-failure # 仅失败时重启
更新与回滚
更新服务
# 拉取最新镜像
docker compose pull
# 重新创建容器
docker compose up -d
# 或者使用特定版本
docker compose up -d --force-recreate openclaw
回滚操作
# 查看镜像历史
docker images openclaw/openclaw
# 使用特定版本
docker tag openclaw/openclaw:v1.0.0 openclaw/openclaw:latest
docker compose up -d --force-recreate openclaw
常见问题
问题 1:容器无法启动
# 查看详细日志
docker compose logs openclaw
# 检查配置
docker compose config
# 检查端口占用
netstat -tlnp | grep 3000
问题 2:数据丢失
解决方案: - 确保正确挂载数据卷 - 定期备份数据 - 使用命名卷而非绑定挂载
问题 3:网络问题
# 检查网络
docker network ls
docker network inspect openclaw-network
# 重建网络
docker network rm openclaw-network
docker compose up -d
问题 4:资源不足
# 查看资源使用
docker stats
# 清理无用资源
docker system prune -a
安全最佳实践
1. 最小权限原则
services:
openclaw:
user: "1000:1000"
read_only: true
2. 网络隔离
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # 内部网络
3. 敏感信息管理
使用 Docker Secrets:
secrets:
api_key:
file: ./secrets/api_key.txt
services:
openclaw:
secrets:
- api_key
总结
Docker 部署是 OpenClaw 推荐的部署方式,具有:
- ✅ 快速部署:一键启动
- ✅ 环境一致:开发生产无缝切换
- ✅ 易于维护:标准化运维
- ✅ 可扩展:轻松横向扩展
按照本指南,你应该能够成功使用 Docker 部署 OpenClaw。
相关阅读: - OpenClaw 安装指南 - OpenClaw 自托管 - OpenClaw 配置详解