其他安装方式
Docker
Docker 是可选的。仅在你需要容器化网关或验证 Docker 流程时使用。
Docker 适合我吗?
- 适合:你想要一个隔离的、可丢弃的网关环境,或者想在无需本地安装的主机上运行 OpenClaw。
- 不适合:你在自己的机器上运行,只想要最快的开发循环。请改用普通安装流程。
- 沙箱化说明:代理沙箱化也使用 Docker,但它不要求整个网关在 Docker 中运行。参见沙箱化。
本指南涵盖:
- 容器化网关(完整的 OpenClaw 在 Docker 中)
- 按会话代理沙箱(主机网关 + Docker 隔离的代理工具)
沙箱化详情:沙箱化
要求
- Docker Desktop(或 Docker Engine)+ Docker Compose v2
- 至少 2 GB 内存用于镜像构建(在 1 GB 内存的主机上,
pnpm install可能因 OOM 被终止,退出码 137) - 足够的磁盘空间用于镜像 + 日志
- 如果在 VPS/公共主机上运行,请查看网络暴露的安全加固,尤其是 Docker
DOCKER-USER防火墙策略。
容器化网关(Docker Compose)
快速开始(推荐)
ℹ️ 此处的 Docker 默认值假设绑定模式(
lan/loopback),而非主机别名。在gateway.bind中使用绑 定模式值(例如lan或loopback),而不是主机别名如0.0.0.0或localhost。
从仓库根目录运行:
./docker-setup.sh
此脚本:
- 在本地构建网关镜像(如果设置了
OPENCLAW_IMAGE则拉取远程镜像) - 运行入门向导
- 打印可选的提供商设置提示
- 通过 Docker Compose 启动网关
- 生成网关令牌并写入
.env
可选环境变量:
OPENCLAW_IMAGE— 使用远程镜像而非本地构建(例如ghcr.io/openclaw/openclaw:latest)OPENCLAW_DOCKER_APT_PACKAGES— 在构建期间安装额外的 apt 包OPENCLAW_EXTENSIONS— 在构建时预安装扩展依赖项(空格分隔的扩展名,例如diagnostics-otel matrix)OPENCLAW_EXTRA_MOUNTS— 添加额外的主机绑定挂载OPENCLAW_HOME_VOLUME— 在命名卷中持久化/home/nodeOPENCLAW_SANDBOX— 选择启用 Docker 网关沙箱引导。仅明确的真值会启用它:1、true、yes、onOPENCLAW_INSTALL_DOCKER_CLI— 本地镜像构建的构建参数透传(1会在镜像中安装 Docker CLI)。docker-setup.sh在OPENCLAW_SANDBOX=1时自动设置此值用于本地构建。OPENCLAW_DOCKER_SOCKET— 覆盖 Docker 套接字路径(默认:DOCKER_HOST=unix://...路径,否则为/var/run/docker.sock)OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1— 紧急措施:允许受信任的私有网络ws://目标用于 CLI/入门客户端路径(默认仅限环回)OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0— 当你需要 WebGL/3D 兼容性时,禁用容器浏览器加固标志--disable-3d-apis、--disable-software-rasterizer、--disable-gpu。OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0— 当浏览器流程需要扩展时保持扩展启用(默认在沙箱浏览器中禁用扩展)。OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=— 设置 Chromium 渲染器进程限制;设置为0以跳过该标志并使用 Chromium 默认行为。
完成后:
- 在浏览器中打开
http://127.0.0.1:18789/。 - 将令牌粘贴到控制界面(设置 → 令牌)。
- 需要再次获取 URL?运行
docker compose run --rm openclaw-cli dashboard --no-open。
为 Docker 网关启用代理沙箱(选择启用)
docker-setup.sh 也可以为 Docker 部署引导 agents.defaults.sandbox.*。通过以下方式启用:
export OPENCLAW_SANDBOX=1
./docker-setup.sh
自定义套接字路径(例如 rootless Docker):
export OPENCLAW_SANDBOX=1
export OPENCLAW_DOCKER_SOCKET=/run/user/1000/docker.sock
./docker-setup.sh
注意:
- 该脚本仅在沙箱先决条件通过后才挂载
docker.sock。 - 如果沙箱设置无法完成,脚本会将
agents.defaults.sandbox.mode重置为off,以避免在重新运行时出现陈旧/损坏的沙箱配置。 - 如果
Dockerfile.sandbox缺失,脚本会打印警告并继续;如果需要,使用scripts/sandbox-setup.sh构建openclaw-sandbox:bookworm-slim。 - 对于非本地的
OPENCLAW_IMAGE值,镜像必须已包含用于沙箱执行的 Docker CLI 支持。
自 动化/CI(非交互式,无 TTY 输出)
对于脚本和 CI,使用 -T 禁用 Compose 伪 TTY 分配:
docker compose run -T --rm openclaw-cli gateway probe
docker compose run -T --rm openclaw-cli devices list --json
如果你的自动化没有导出 Claude 会话变量,现在将它们留空不设置,在 docker-compose.yml 中默认解析为空值,以避免重复的“变量未设置”警告。
共享网络安全说明(CLI + 网关)
openclaw-cli 使用 network_mode: "service:openclaw-gateway",以便 CLI 命令在 Docker 中可以通过 127.0.0.1 可靠地访问网关。将此视为共享信任边界:环回绑定并不是这两个容器之间的隔离。如果你需要更强的隔离,请从单独的容器/主机网络路径运行命令,而不是使用捆绑的 openclaw-cli 服务。为了减少 CLI 进程被攻破 时的影响,compose 配置删除了 NET_RAW/NET_ADMIN 并在 openclaw-cli 上启用了 no-new-privileges。它在主机上写入配置/工作空间:
~/.openclaw/~/.openclaw/workspace
在 VPS 上运行?参见 Hetzner (Docker VPS)。
使用远程镜像(跳过本地构建)
官方预构建镜像发布在:
使用镜像名称 ghcr.io/openclaw/openclaw(不是 Docker Hub 上名称类似的镜像)。常见标签:
main— 来自main分支的最新构建- `` — 发布标签构建(例如
2026.2.26) latest— 最新的稳定发布标签
基础镜像元数据
主 Docker 镜像当前使用:
node:22-bookworm
Docker 镜像现在发布 OCI 基础镜像注解(sha256 是示例):
org.opencontainers.image.base.name=docker.io/library/node:22-bookwormorg.opencontainers.image.base.digest=sha256:6d735b4d33660225271fda0a412802746658c3a1b975507b2803ed299609760aorg.opencontainers.image.source=https://github.com/openclaw/openclaworg.opencontainers.image.url=https://openclaw.aiorg.opencontainers.image.documentation=https://docs.openclaw.ai/install/dockerorg.opencontainers.image.licenses=MITorg.opencontainers.image.title=OpenClaworg.opencontainers.image.description=OpenClaw 网关和 CLI 运行时容器镜像org.opencontainers.image.revision=<git-sha>org.opencontainers.image.version=<tag-or-main>org.opencontainers.image.created=
参考:OCI 镜像注解 发布上下文:此仓库的标签历史在 v2026.2.22 及更早的 2026 标签(例如 v2026.2.21、v2026.2.9)中已经使用 Bookworm。默认情况下,设置脚本从源代码构建镜像。要拉取预构建的镜像,请在运行脚本前设置 OPENCLAW_IMAGE:
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./docker-setup.sh
脚本检测到 OPENCLAW_IMAGE 不是默认的 openclaw:local,并运行 docker pull 而不是 docker build。其他所有操作(入门、网关启动、令牌生成)的工作方式相同。docker-setup.sh 仍然从仓库根目录运行,因为它使用本地的 docker-compose.yml 和辅助文件。OPENCLAW_IMAGE 跳过了本地镜像构建时间;它不会替换 compose/设置工作流。
Shell 助手(可选)
为了更轻松的日常 Docker 管理,安装 ClawDock:
mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/shell-helpers/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
添加到你的 shell 配置(zsh):
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
然后使用 clawdock-start、clawdock-stop、clawdock-dashboard 等命令。运行 clawdock-help 查看所有命令。详情参见 ClawDock 助手 README。
手动流程(compose)
docker build -t openclaw:local -f Dockerfile .
docker compose run --rm openclaw-cli onboard
docker compose up -d openclaw-gateway
注意:从仓库根目录运行 docker compose ...。如果你启用了 OPENCLAW_EXTRA_MOUNTS 或 OPENCLAW_HOME_VOLUME,设置脚本会写入 docker-compose.extra.yml;在其他地方运行 Compose 时包含它:
docker compose -f docker-compose.yml -f docker-compose.extra.yml <command>
控制界面令牌 + 配对(Docker)
如果你看到“未授权”或“已断开连接 (1008):需要配对”,获取新的仪表板链接并批准浏览器设备:
docker compose run --rm openclaw-cli dashboard --no-open
docker compose run --rm openclaw-cli devices list
docker compose run --rm openclaw-cli devices approve <requestId>
额外挂载(可选)
如果你想将额外的主机目录挂载到容器中,在运行 docker-setup.sh 前设置 OPENCLAW_EXTRA_MOUNTS。这接受一个逗号分隔的 Docker 绑定挂载列表,并通过生成 docker-compose.extra.yml 将它们应用到 openclaw-gateway 和 openclaw-cli。示例:
export OPENCLAW_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw"
./docker-setup.sh
注意:
- 路径必须在 macOS/Windows 上与 Docker Desktop 共享。
- 每个条目必须是
source:target[:options]格式,没有空格、制表符或换行符。 - 如果你编辑了
OPENCLAW_EXTRA_MOUNTS,重新运行docker-setup.sh以重新生成额外的 compose 文件。 docker-compose.extra.yml是生成的。不要手动编辑它。
持久化整个容器主目录(可选)
如果你希望 /home/node 在容器重新创建后持久存在,通过 OPENCLAW_HOME_VOLUME 设置一个命名卷。这会创建一个 Docker 卷并将其挂载到 /home/node,同时保留标准的配置/工作空间绑定挂载。在此处使用命名卷(不是绑定路径);对于绑定挂载,请使用 OPENCLAW_EXTRA_MOUNTS。示例:
export OPENCLAW_HOME_VOLUME="openclaw_home"
./docker-setup.sh
你可以将此与额外挂载结合:
export OPENCLAW_HOME_VOLUME="openclaw_home"
export OPENCLAW_EXTRA_MOUNTS="$HOME/.codex:/home/node/.codex:ro,$HOME/github:/home/node/github:rw"
./docker-setup.sh
注意:
- 命名卷必须匹配
^[A-Za-z0-9][A-Za-z0-9_.-]*$。 - 如果你更改了
OPENCLAW_HOME_VOLUME,重新运行docker-setup.sh以重新生成额外的 compose 文件。 - 命名卷会一直存在,直到使用
docker volume rm删除。
安装额外的 apt 包(可选)
如果你需要在镜像内安装系统包(例如,构建工具或媒体库),在运行 docker-setup.sh 前设置 OPENCLAW_DOCKER_APT_PACKAGES。这会在镜像构建期间安装这些包,因此即使容器被删除,它们也会持久存在。示例:
export OPENCLAW_DOCKER_APT_PACKAGES="ffmpeg build-essential"
./docker-setup.sh
注意:
- 这接受一个空格分隔的 apt 包名列表。
- 如果你更改了
OPENCLAW_DOCKER_APT_PACKAGES,重新运行docker-setup.sh以重新构建镜像。
预安装扩展依赖项(可选)
具有自己的 package.json 的扩展(例如 diagnostics-otel、matrix、msteams)在首次加载时安装其 npm 依赖项。要将这些依赖项烘焙到镜像中,请在运行 docker-setup.sh 前设置 OPENCLAW_EXTENSIONS:
export OPENCLAW_EXTENSIONS="diagnostics-otel matrix"
./docker-setup.sh
或者直接构建时:
docker build --build-arg OPENCLAW_EXTENSIONS="diagnostics-otel matrix" .
注意:
- 这接受一个空格分隔的扩展目录名列表(位于
extensions/下)。 - 仅影响具有
package.json的扩展;没有package.json的轻量级插件会被忽略。 - 如果你更改了
OPENCLAW_EXTENSIONS,重新运行docker-setup.sh以重新构建镜像。
高级用户 / 全功能容器(选择启用)
默认的 Docker 镜像安全第一,并以非 root 用户 node 运行。这保持了较小的攻击面,但也意味着:
- 运行时无法安装系统包
- 默认没有 Homebrew
- 没有捆绑的 Chromium/Playwright 浏览器
如果你想要一个功能更全的容器,请使用这些选择启用的开关:
- 持久化
/home/node以便浏览器下载和工具缓存得以保留:
export OPENCLAW_HOME_VOLUME="openclaw_home"
./docker-setup.sh
- 将系统依赖项烘焙到镜像中(可重复 + 持久):
export OPENCLAW_DOCKER_APT_PACKAGES="git curl jq"
./docker-setup.sh
- 无需
npx安装 Playwright 浏览器(避免 npm 覆盖冲突):
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
如果你需要 Playwright 安装系统依赖项,请使用 OPENCLAW_DOCKER_APT_PACKAGES 重新构建镜像,而不是在运行时使用 --with-deps。
- 持久化 Playwright 浏览器下载:
- 在
docker-compose.yml中设置PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright。 - 通过
OPENCLAW_HOME_VOLUME确保/home/node持久化,或者通过OPENCLAW_EXTRA_MOUNTS挂载/home/node/.cache/ms-playwright。
权限 + EACCES
镜像以 node(uid 1000)运行。如果你在 /home/node/.openclaw 上看到权限错误,请确保你的主机绑定挂载归 uid 1000 所有。示例(Linux 主机):
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
如果你为了方便选择以 root 身份运行,你接受了安全权衡。
更快的重建(推荐)
为了加速重建,请对你的 Dockerfile 排序,以便依赖层被缓存。这避免了除非锁定文件更改,否则重新运行 pnpm install:
FROM node:22-bookworm
# 安装 Bun(构建脚本所需)
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:${PATH}"
RUN corepack enable
WORKDIR /app
# 除非包元数据更改,否则缓存依赖项
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]