OpenClaw Docker部署踩坑全记录(OpenClaw v2026.3.23)
很多人第一次部署 OpenClaw,都会踩一个坑: 官方文档默认让你 clone + build + 配环境变量 但实际体验下来只有两个字:折腾 这篇文章,我直接给你一套更干净、更稳定的方案:纯Docker Compose部署(无需本地build)
找到我: C某DN, 掘某金, 头某条, 博某客园搜索改一下配置文件, 不出意外每篇文章我都会在这些平台更新.
一、选择docker部署
-
不污染宿主机 → Node、依赖、配置全部隔离在容器里
-
不会和本地环境冲突 → 不用担心你机器上已有 Node/npm/版本问题
-
可复制性极强 → 同一份
docker-compose.yml,在哪都能跑@改一下配置文件
二、准备工作
2.1 选择镜像
之前的文档里面有下面这段话,现在不知道为啥没有了。链接:https://docs.openclaw.ai/install/docker
Use a remote image (skip local build)Official pre-built images are published at:
GitHub Container Registry packageUse image name ghcr.io/openclaw/openclaw (not similarly named Docker Hub images).Common tags:
main — latest build from main
<version> — release tag builds (for example 2026.2.26)
latest — latest stable release tag@改一下配置文件
大意就是
正确镜像名是:ghcr.io/openclaw/openclaw,而不是Docker Hub上的同名镜像,链接:https://github.com/openclaw/openclaw/pkgs/container/openclaw
常用tag:
main — 最新开发版(不稳定)
latest — 稳定版本
2026.x.x — 指定版本
所以直接执行下面的命令就行, 这一步可能需要魔法。不行的话去渡渡鸟 docker.aityp.com/image/ghcr.… 去下载镜像,注意电脑架构。@改一下配置文件
docker pull ghcr.io/openclaw/openclaw:2026.3.23
2.2 我的目录结构
openclaw/
├── docker-compose.yml
└── data/
├── config/
└── workspace/
说明:
config:存配置(必须)workspace:工作目录(可选)
2.3 docker-compose文件
这是我实际跑通的版本
services:
openclaw-gateway:
image: ghcr.io/openclaw/openclaw:2026.3.23
container_name: openclaw-gateway
environment:
HOME: /home/node
TERM: xterm-256color
TZ: Asia/Shanghai
# 必填 改成你自己的token 下面还有一个地方的token也得改
OPENCLAW_GATEWAY_TOKEN: YOUR_TOKEN
# 是否允许ws(一般不用改)
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: "false"
# Claude 相关(按需填写)
CLAUDE_AI_SESSION_KEY: ""
CLAUDE_WEB_SESSION_KEY: ""
CLAUDE_WEB_COOKIE: ""
volumes:
- ./data/config:/home/node/.openclaw
# - ./data/workspace:/home/node/.openclaw/workspace
ports:
- "18889:18789" # Web / API
- "18890:18790" # 内部 bridge
# restart: unless-stopped # @改一下配置文件
init: true
command:
[ "node", "dist/index.js", "gateway", "--bind", "lan", "--port", "18789",]
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
openclaw-cli:
image: ghcr.io/openclaw/openclaw:2026.3.23
container_name: openclaw-cli
network_mode: "service:openclaw-gateway"
cap_drop:
- NET_RAW
- NET_ADMIN
security_opt:
- no-new-privileges:true
environment:
HOME: /home/node
TERM: xterm-256color
TZ: Asia/Shanghai
OPENCLAW_GATEWAY_TOKEN: YOUR_TOKEN
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: "false"
BROWSER: echo
CLAUDE_AI_SESSION_KEY: ""
CLAUDE_WEB_SESSION_KEY: ""
CLAUDE_WEB_COOKIE: ""
volumes:
- ./data/config:/home/node/.openclaw
# - ./data/workspace:/home/node/.openclaw/workspace
stdin_open: true
tty: true
init: true
entrypoint: ["node", "dist/index.js"]
depends_on:
- openclaw-gateway
三、docker部署流程
看你安装的是docker compose还是docker-compose,执行:
docker-compose run --rm openclaw-cli onboard
docker-compose -f docker-compose.yml run --rm openclaw-cli config set gateway.controlUi.allowedOrigins '["*"]' --strict-json
docker-compose -f docker-compose.yml run --rm openclaw-cli config set gateway.controlUi.dangerouslyDisableDeviceAuth true
docker-compose up -d openclaw-gateway
3.1 过程如下
docker-compose run --rm openclaw-cli onboard
方向键控制,回车确认,按空格多选
I understand this is personal-by-default and shared/multi-user use requires lock-down. Continue?
│ Yes
◇ Setup mode
│ QuickStart
◇ Model/auth provider
│ vLLM
◇ vLLM base URL
│ http://xx.xx.xx.xx:xxxxx/v1
│
◇ vLLM API key
│ token-xxxxxx
│
◇ vLLM model
│ Qwen3
◇ Default model
│ Keep current (vllm/Qwen3)
│
◇ Select channel (QuickStart)
│ Skip for now
│
◇ Search provider
│ Skip for now
│
◇ Configure skills now? (recommended)
│ No
│
◇ Set GOOGLE_PLACES_API_KEY for goplaces?
│ No
│
◇ Set NOTION_API_KEY for notion?
│ No
│
◇ Set OPENAI_API_KEY for openai-whisper-api?
│ No
│
◇ Set ELEVENLABS_API_KEY for sag?
│ No
│
◇ Enable hooks? 按空格多选@改一下配置文件
│ 📝 command-logger, 💾 session-memory
四、访问地址
因为我做了端口映射:
http://127.0.0.1:18889
打开看到页面,复制token,密码不用填就能登录进去@改一下配置文件
五、官方的问题
- 官网是需要git拉下来之后手动build,每次太麻烦了,不如把docker-compose.yml文件复制下来改改了。
- 如果你用官网的build方式,会生成一个.env文件,可以看openclaw/scripts/docker/setup.sh这个文件里面。
- 我之前一直纳闷官方docker compose的文件的环境变量是哪里来的,结果找啊找啊在这里找到了@改一下配置文件