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 配置详解