使用Docker部署OpenClaw的關鍵步驟
摘要
Docker 部署是 OpenClaw 從開發(fā)環(huán)境走向生產(chǎn)環(huán)境的關鍵一步。本文從 Docker 基礎概念出發(fā),深入講解 OpenClaw 的 Docker 鏡像構建、多階段優(yōu)化、環(huán)境變量注入、數(shù)據(jù)持久化、健康檢查配置,以及 docker-compose 多服務編排。通過一個完整的實戰(zhàn)案例——將本地 OpenClaw 項目容器化并部署到服務器,你將掌握從 Dockerfile 編寫到生產(chǎn)運行的全流程。讀完你會發(fā)現(xiàn):容器化不是"加一層 Docker",而是讓部署變得可重復、可移植、可擴展。
1. 引言:為什么你的 OpenClaw 需要 Docker
1.1 從"我機器上能跑"到"服務器上也能跑"
你一定遇到過這種場景:
- 本地開發(fā)環(huán)境一切正常,部署到服務器后各種報錯
- “Python 版本不對”、“Node.js 版本太舊”、“系統(tǒng)依賴缺失”
- 換個服務器又要重新配一遍環(huán)境
- 團隊新成員入職,光搭環(huán)境就要半天
Docker 解決的就是這個問題——把應用和它的所有依賴打包成一個鏡像,在任何安裝了 Docker 的機器上都能跑。
1.2 容器化 vs 裸機部署

| 維度 | 裸機部署 | Docker 部署 |
|---|---|---|
| 環(huán)境一致性 | ? 每臺機器不同 | ? 鏡像保證一致 |
| 部署速度 | 分鐘級(安裝依賴) | 秒級(拉鏡像+啟動) |
| 回滾 | 手動恢復文件 | docker run 上一版本鏡像 |
| 資源隔離 | ? 進程級 | ? 容器級(CPU/內(nèi)存限制) |
| 可移植性 | ? 綁定操作系統(tǒng) | ? 任何支持 Docker 的系統(tǒng) |
| 擴展性 | 手動配置多實例 | docker-compose / K8s 編排 |
2. Docker 基礎概念速覽
2.1 核心概念
在寫 Dockerfile 之前,先厘清三個核心概念:
| 概念 | 說明 | 類比 |
|---|---|---|
| 鏡像(Image) | 應用的只讀模板,包含代碼+運行時+依賴 | 安裝包 ISO |
| 容器(Container) | 鏡像的運行實例,有獨立的文件系統(tǒng)和網(wǎng)絡 | 安裝后的運行程序 |
| 倉庫(Registry) | 存儲和分發(fā)鏡像的地方 | App Store |

2.2 Dockerfile 基礎指令
| 指令 | 作用 | 示例 |
|---|---|---|
FROM | 指定基礎鏡像 | FROM node:20-alpine |
WORKDIR | 設置工作目錄 | WORKDIR /app |
COPY | 復制文件到鏡像 | COPY . /app |
RUN | 在構建時執(zhí)行命令 | RUN npm install |
ENV | 設置環(huán)境變量 | ENV NODE_ENV=production |
EXPOSE | 聲明容器端口 | EXPOSE 18789 |
CMD | 容器啟動時的默認命令 | CMD ["node", "server.js"] |
3. OpenClaw Docker 鏡像構建
3.1 基礎 Dockerfile
# ============================================
# OpenClaw Dockerfile - 基礎版本
# 適用于開發(fā)環(huán)境和快速驗證
# ============================================
FROM node:20-alpine
# 設置工作目錄
WORKDIR /app
# 安裝系統(tǒng)依賴
RUN apk add --no-cache \
python3 \
py3-pip \
git \
curl \
bash
# 安裝 OpenClaw
RUN npm install -g openclaw
# 創(chuàng)建數(shù)據(jù)目錄
RUN mkdir -p /data/openclaw /etc/openclaw
# 復制配置文件
COPY openclaw.yaml /etc/openclaw/openclaw.yaml
# 聲明端口
EXPOSE 18789
# 健康檢查
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:18789/health || exit 1
# 啟動 Gateway
CMD ["openclaw", "gateway", "start"]
構建和運行:
# 構建鏡像 docker build -t openclaw:latest . # 運行容器 docker run -d \ --name openclaw-gateway \ -p 18789:18789 \ -v /data/openclaw:/data/openclaw \ -v /etc/openclaw:/etc/openclaw \ -e OPENAI_API_KEY="sk-xxx" \ openclaw:latest # 查看日志 docker logs -f openclaw-gateway # 查看狀態(tài) docker ps | grep openclaw
這個基礎版本適合快速驗證。但生產(chǎn)環(huán)境還需要考慮鏡像體積、安全性、多階段構建等問題。
3.2 多階段構建優(yōu)化
# ============================================
# OpenClaw Dockerfile - 多階段構建(生產(chǎn)級)
# 優(yōu)化點:減小鏡像體積、分離構建和運行環(huán)境
# ============================================
# ===== 階段1:構建階段 =====
FROM node:20-alpine AS builder
WORKDIR /build
# 安裝構建工具
RUN apk add --no-cache python3 py3-pip git make g++
# 安裝 OpenClaw(含編譯依賴)
RUN npm install -g openclaw@latest
# 安裝 Python 依賴
RUN pip3 install --no-cache-dir \
requests \
aiohttp \
websockets
# ===== 階段2:運行階段 =====
FROM node:20-alpine AS runner
# 安裝運行時依賴(不含編譯工具)
RUN apk add --no-cache \
python3 \
py3-pip \
curl \
tini \
su-exec
# 創(chuàng)建非 root 用戶
RUN addgroup -g 1000 openclaw && \
adduser -u 1000 -G openclaw -s /bin/sh -D openclaw
# 從構建階段復制 OpenClaw
COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=builder /usr/local/bin/openclaw /usr/local/bin/openclaw
# 復制 Python 包
COPY --from=builder /usr/lib/python3* /usr/lib/python3*
COPY --from=builder /usr/local/lib/python3* /usr/local/lib/python3*
# 創(chuàng)建工作目錄
WORKDIR /app
RUN mkdir -p /data/openclaw /etc/openclaw /app/workspace && \
chown -R openclaw:openclaw /data/openclaw /app/workspace
# 復制配置
COPY --chown=openclaw:openclaw openclaw.yaml /etc/openclaw/openclaw.yaml
# 切換到非 root 用戶
USER openclaw
# 健康檢查
HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
CMD curl -sf http://localhost:18789/health || exit 1
# 暴露端口
EXPOSE 18789
# 使用 tini 作為 init 進程(處理僵尸進程和信號轉發(fā))
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["openclaw", "gateway", "start"]
多階段構建的優(yōu)勢:
| 指標 | 基礎版本 | 多階段版本 | 優(yōu)化幅度 |
|---|---|---|---|
| 鏡像大小 | ~800MB | ~350MB | -56% |
| 構建時間 | 120s | 90s | -25% |
| 安全 | root 運行 | 非 root 用戶 | 更安全 |
| 攻擊面 | 含編譯工具 | 僅運行時 | 更小 |
3.3 環(huán)境變量注入策略
# openclaw.yaml - 使用環(huán)境變量占位符
gateway:
port: ${GATEWAY_PORT:-18789}
auth_token: ${GATEWAY_AUTH_TOKEN}
model:
default: ${DEFAULT_MODEL:-gpt-4o-mini}
providers:
openai:
api_key: ${OPENAI_API_KEY}
base_url: ${OPENAI_BASE_URL:-https://api.openai.com/v1}
channels:
feishu:
app_id: ${FEISHU_APP_ID}
app_secret: ${FEISHU_APP_SECRET}
telegram:
bot_token: ${TELEGRAM_BOT_TOKEN}
logging:
level: ${LOG_LEVEL:-info}
file: /data/openclaw/logs/gateway.log# 使用 env 文件啟動 docker run -d \ --name openclaw-prod \ --env-file .env.production \ -p 18789:18789 \ -v openclaw-data:/data/openclaw \ openclaw:latest
# .env.production 示例 GATEWAY_PORT=18789 GATEWAY_AUTH_TOKEN=your-secure-token-here DEFAULT_MODEL=gpt-4o OPENAI_API_KEY=sk-prod-xxx FEISHU_APP_ID=cli_xxx FEISHU_APP_SECRET=xxx TELEGRAM_BOT_TOKEN=123:abc LOG_LEVEL=warn
4. docker-compose 多服務編排
4.1 完整編排文件
# docker-compose.yml
# OpenClaw 生產(chǎn)環(huán)境多服務編排
version: "3.8"
services:
# ===== OpenClaw Gateway =====
gateway:
build:
context: .
dockerfile: Dockerfile
image: openclaw:latest
container_name: openclaw-gateway
restart: unless-stopped
ports:
- "${GATEWAY_PORT:-18789}:18789"
volumes:
# 數(shù)據(jù)持久化
- openclaw_data:/data/openclaw
# 配置文件
- ./config/openclaw.yaml:/etc/openclaw/openclaw.yaml:ro
# 工作空間(Skills、插件等)
- ./workspace:/app/workspace
# 日志目錄
- openclaw_logs:/data/openclaw/logs
env_file:
- .env.production
environment:
- NODE_ENV=production
- TZ=Asia/Shanghai
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:18789/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
networks:
- openclaw-net
# 資源限制
deploy:
resources:
limits:
cpus: "2"
memory: "2G"
reservations:
cpus: "0.5"
memory: "512M"
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
# ===== Redis(可選:會話緩存) =====
redis:
image: redis:7-alpine
container_name: openclaw-redis
restart: unless-stopped
volumes:
- redis_data:/data
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
networks:
- openclaw-net
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"
# ===== 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
depends_on:
gateway:
condition: service_healthy
networks:
- openclaw-net
deploy:
resources:
limits:
cpus: "0.5"
memory: "256M"
volumes:
openclaw_data:
driver: local
openclaw_logs:
driver: local
redis_data:
driver: local
networks:
openclaw-net:
driver: bridge4.2 Nginx 反向代理配置
# nginx/nginx.conf
upstream openclaw_gateway {
server gateway:18789;
keepalive 32;
}
server {
listen 80;
server_name your-domain.com;
# 強制 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 請求體大小限制
client_max_body_size 50m;
# WebSocket 支持
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_connect_timeout 60s;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
location / {
proxy_pass http://openclaw_gateway;
}
# 健康檢查端點
location /health {
proxy_pass http://openclaw_gateway/health;
access_log off;
}
}4.3 啟動與運維命令
# 啟動所有服務 docker-compose up -d # 查看服務狀態(tài) docker-compose ps # 查看 Gateway 日志 docker-compose logs -f gateway # 重啟 Gateway(不重啟 Redis/Nginx) docker-compose restart gateway # 更新鏡像并重新部署 docker-compose pull gateway docker-compose up -d --no-deps gateway # 停止所有服務 docker-compose down # 停止并刪除數(shù)據(jù)卷(?? 危險操作) docker-compose down -v
5. 實戰(zhàn):從零容器化你的 OpenClaw
5.1 完整項目結構
openclaw-docker/
├── Dockerfile # 鏡像構建文件
├── docker-compose.yml # 多服務編排
├── .env.production # 生產(chǎn)環(huán)境變量
├── .dockerignore # 構建排除文件
├── config/
│ └── openclaw.yaml # Gateway 配置
├── workspace/ # Skills、插件等
│ └── skills/
├── nginx/
│ ├── nginx.conf # 反向代理配置
│ └── ssl/ # SSL 證書
└── scripts/
├── deploy.sh # 部署腳本
└── backup.sh # 備份腳本
5.2 部署腳本
#!/bin/bash
# scripts/deploy.sh
# OpenClaw Docker 一鍵部署腳本
set -e
echo "?? 開始部署 OpenClaw..."
# 1. 檢查 Docker 環(huán)境
if ! command -v docker &> /dev/null; then
echo "? Docker 未安裝,請先安裝 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
echo "? docker-compose 未安裝"
exit 1
fi
# 2. 檢查環(huán)境變量文件
if [ ! -f .env.production ]; then
echo "? .env.production 文件不存在"
echo "?? 請從 .env.example 復制并填寫配置"
exit 1
fi
# 3. 創(chuàng)建必要目錄
mkdir -p workspace/skills nginx/ssl data/backups
# 4. 備份當前運行版本(如果存在)
if docker ps | grep -q openclaw-gateway; then
echo "?? 備份當前版本..."
docker commit openclaw-gateway openclaw:backup-$(date +%Y%m%d-%H%M%S)
fi
# 5. 拉取最新鏡像并構建
echo "?? 構建鏡像..."
docker-compose build --pull gateway
# 6. 啟動服務
echo "?? 啟動服務..."
docker-compose up -d
# 7. 等待健康檢查通過
echo "? 等待服務就緒..."
for i in $(seq 1 30); do
if curl -sf http://localhost:18789/health > /dev/null 2>&1; then
echo "? OpenClaw Gateway 已就緒"
break
fi
sleep 2
done
# 8. 顯示狀態(tài)
echo ""
echo "?? 服務狀態(tài):"
docker-compose ps
echo ""
echo "? 部署完成!"
echo " Gateway: http://localhost:18789"
echo " 日志: docker-compose logs -f gateway"
5.3 備份腳本
#!/bin/bash
# scripts/backup.sh
# OpenClaw 數(shù)據(jù)備份腳本
BACKUP_DIR="./data/backups"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/openclaw-backup-${TIMESTAMP}.tar.gz"
mkdir -p "$BACKUP_DIR"
echo "?? 備份 OpenClaw 數(shù)據(jù)..."
# 備份數(shù)據(jù)卷
docker run --rm \
-v openclaw_data:/data:ro \
-v "$(pwd)/${BACKUP_DIR}":/backup \
alpine tar czf "/backup/openclaw-data-${TIMESTAMP}.tar.gz" -C /data .
# 備份配置文件
tar czf "${BACKUP_DIR}/openclaw-config-${TIMESTAMP}.tar.gz" \
config/ .env.production docker-compose.yml
# 清理 7 天前的備份
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "? 備份完成: ${BACKUP_FILE}"
echo " 保留最近 7 天的備份"
6. 常見問題與排錯
6.1 問題排查表
| 癥狀 | 可能原因 | 排查命令 |
|---|---|---|
| 容器啟動后立即退出 | 配置文件錯誤 | docker logs openclaw-gateway |
| 端口無法訪問 | 端口映射未生效 | docker port openclaw-gateway |
| 健康檢查失敗 | 服務未就緒 | docker exec openclaw-gateway curl localhost:18789/health |
| 數(shù)據(jù)丟失 | 未掛載數(shù)據(jù)卷 | docker inspect openclaw-gateway | grep Mounts -A 10 |
| 內(nèi)存溢出 | 資源限制過低 | docker stats openclaw-gateway |
| 權限錯誤 | 文件 owner 不匹配 | docker exec openclaw-gateway ls -la /data/openclaw |
6.2 進入容器調(diào)試
# 進入容器 Shell docker exec -it openclaw-gateway sh # 查看進程 docker exec openclaw-gateway ps aux # 查看資源使用 docker stats openclaw-gateway --no-stream # 查看容器詳細信息 docker inspect openclaw-gateway
7. 總結
本文從零開始,完整走通了 OpenClaw 的 Docker 容器化部署全流程:
核心要點:
- 多階段構建:分離構建和運行環(huán)境,鏡像體積減少 56%,攻擊面更小
- 環(huán)境變量注入:所有敏感配置通過
.env文件注入,不硬編碼在配置文件中 - docker-compose 編排:Gateway + Redis + Nginx 三服務協(xié)同,一鍵啟動
- 健康檢查:
HEALTHCHECK指令確保服務可用,配合depends_on控制啟動順序 - 數(shù)據(jù)持久化:通過命名卷(named volume)持久化數(shù)據(jù),容器刪除數(shù)據(jù)不丟
- 一鍵部署腳本:
deploy.sh自動化檢查、備份、構建、啟動全流程
思考題:
- 你的 OpenClaw 需要支持 1000 個并發(fā)用戶。單容器實例可能不夠。你會如何設計多實例的負載均衡方案?
- Docker 容器的日志默認輸出到 stdout/stderr。如果日志量很大(每天 10GB),你會如何設計日志收集和輪轉策略?
- 你的
.env.production包含了 API Key 等敏感信息。在團隊協(xié)作中,如何安全地管理這些密鑰(既要能分享給團隊成員,又不能泄露到代碼倉庫)?
以上就是使用Docker部署OpenClaw的關鍵步驟的詳細內(nèi)容,更多關于Docker部署OpenClaw步驟的資料請關注腳本之家其它相關文章!
相關文章

OpenClaw從單機Docker部署遷移到Kubernetes集群的完整方案
當你的 OpenClaw 從單機走向集群,Kubernetes 是繞不開的選擇,本文從 K8s 核心概念出發(fā),系統(tǒng)講解 OpenClaw 的 K8s 部署架構,需要的朋友可以參考下2026-06-29
本文詳細介紹使用Docker部署OpenClD智能體平臺,涵蓋開發(fā)和生產(chǎn)環(huán)境部署指南,通過合理配置Docker確保嚴格隔離和資源限制,感興趣的可以了解一下2026-06-11
部署OpenClaw的過程看似簡單,卻因為細節(jié)問題踩了不少坑,這篇文章主要介紹了docker部署openclaw遇到的一些踩坑記錄,文中通過代碼及圖文介紹的非常詳細,需要的朋友可以參考下2026-04-28
Docker部署OpenClaw后容器內(nèi)無法使用代理的解決方法
在本地跑得好好的OpenClaw,一放到Docker容器里,代理就不生效了,如果你正在經(jīng)歷這些,別懷疑人生——這不是你的問題,是Docker網(wǎng)絡和OpenClaw代理解析邏輯的雙重夾擊,我2026-04-23
阿里云CentOS上如何使用Docker部署OpenClaw并接入百煉大模型
文章主要講述了作者在阿里云服務器上搭建OpenClaw的過程,選擇了阿里云百煉大模型并使用了免費額度,文中詳細介紹了環(huán)境準備步驟,包括安裝Docker和DockerCompose,以及配置Doc2026-04-15
OpenClaw接入飛書機器人的完整教程(Docker部署版)
本教程基于 Docker 部署的 OpenClaw 環(huán)境編寫,所有命令都已適配 Docker 容器化場景,如果你尚未部署 OpenClaw,請先完成基礎部署,感興趣的小伙伴可以跟隨小編一起學習一2026-04-10
騰訊云OpenClaw部署之解決Docker鏡像拉取超時的完整步驟
penClaw作為2026年爆火的開源AI 執(zhí)行引擎,憑借其強大的任務自動化能力和靈活的擴展性,吸引了大量開發(fā)者和企業(yè)用戶,這篇文章主要介紹了騰訊云OpenClaw部署之解決Docker鏡像2026-04-09
OpenClaw安裝部署指南之npm、Docker與源碼三種模式詳解
OpenClaw 是一款熱門且強大的開源 AI 智能體框架,大家稱它為養(yǎng)龍蝦,其核心能力是讓大語言模型能夠理解指令并直接操作你的電腦完成真實任務,這篇文章主要介紹了OpenClaw安裝2026-04-08
想要擁有一個完全私有化部署、支持 Claude 和 ChatGPT 的中文 AI 助手?OpenClaw(原Clawdbot/Moltbot)漢化版正是你的不二之選,本文給大家介紹了如何使用Docker部署OpenC2026-03-30
OpenClaw Docker部署踩坑全記錄(OpenClaw v2026.3.23)
文章詳細記錄了使用Docker部署OpenClaw的全過程,強調(diào)了使用官方鏡像而非本地build的重要性,并提供了完整的docker-compose配置文件,文章還指導了部署流程和訪問地址,最后解2026-03-26











