转载自:https://mp.weixin.qq.com/s/I3dUhKyDWPhn0Kg4R1Oa2A

前言

openclaw的版本迭代很快,在宿主机系统直接部署方式升级一旦出现问题不好处理,采用docker方式部署易于快速部署新版本和维护。

一、简介官方脚本式Docker部署方法

1.1 git拉取代码仓库

git clone https://github.com/openclaw/openclaw

1.2 进入源码根目录,执行安装脚本:

cd openclaw
./docker-setup.sh

以上是官方的docker安装方式,本文记录的是不采用上述官方脚本方式部署docker版的openclaw,而是直接拉取官方的openclaw镜像文件,然后用docker run命令的方式部署openclaw,这个过程可以更细化了解openclawdocker镜像运行方式和维护经验,为进一步编写docker-compose打下基础。

二、Docker run方式直接拉取镜像部署Openclaw

2.1 镜像文件分为:Docker slim版本与完整版

OpenClaw 的 Docker ‌slim 版本‌与‌非 slim(标准/full)版本‌的主要区别体现在‌镜像体积、启动速度、依赖包含范围和适用场景‌等方面。根据最新公开资料(截至 2026 年 4 月),具体对比如下:

核心区别

冷启动耗时

‌slim 版本‌:平均 ‌3.2 秒‌ ‌

‌非 slim 版本‌:未明确给出,但通常因体积更大而启动稍慢 ‌

包含内容

‌slim 版本‌:

剥离了构建工具、调试工具、文档等‌非运行时依赖‌

仅保留最小化 Python 运行时与必要 .so 库 ‌

支持通过环境变量(如 OPENCLAW_EXTENSIONS=telegram,feishu)‌预装插件‌,实现按需扩展 ‌

非 slim 版本‌:

包含完整功能集,适合‌开发、测试或企业级部署‌

可能内置更多调试工具和示例配置 ‌

‌适用场景‌

slim 版本‌:

资源受限环境(如 NAS、树莓派、边缘设备)

需要‌快速部署、低内存占用‌的生产或长期运行场景 ‌

非 slim 版本‌:

开发调试、本地测试、需要完整功能的环境

对启动速度要求不高但需完整工具链的场景 ‌

2.2 拉取镜像

1、拉取最新版本镜像

拉取opencaw官方完整镜像

docker pull ghcr.io/openclaw/openclaw:latest

拉取openclaw官方指定版本完整镜像如2026.4.11

docker pull ghcr.io/openclaw/openclaw:2026.4.11

拉取openclaw官方指定版本slim镜像如2026.4.12-slim

docker pull ghcr.io/openclaw/openclaw:2026.4.12-slim

下载镜像后校验完整和文件尺寸

docker images
docker images --digests 镜像名或ID

2.3 ​​​准备本地映射目录 

1、先用最简单的docker run命令让openclaw容器跑起来,以便明确要映射到本地磁盘的路径

docker run -d --name openclaw ghcr.io/openclaw/openclaw:2026.4.12
docker ps

进入容器确定要映射的目录(一般是openclaw的主目录就是配置文件openclaw.json所在的目录,也可以包括滚动log所在目录)

docker exec -it openclaw bash
node@b650f610bfcb:/app$ pwd
/app
node@b650f610bfcb:/app$ ls
dist  docs  extensions  node_modules  openclaw.mjs  package.json  qa  skills
node@b650f610bfcb:/app$ cd ~
node@b650f610bfcb:~$ pwd
/home/node
node@b650f610bfcb:~$ ls -a
.  ..  .bash_logout  .bashrc  .codex  .npm  .openclaw  .profile
node@b650f610bfcb:~$ cd .openclaw/
node@b650f610bfcb:~/.openclaw$ ls -a
.  ..  canvas  identity  logs  openclaw.json  openclaw.json.bak  tasks  update-check.json  workspace
node@b650f610bfcb:~/.openclaw$ cd /tmp/
node@b650f610bfcb:/tmp$ ls
jiti  node-compile-cache  openclaw  openclaw-1000
node@b650f610bfcb:/tmp$ cd openclaw
node@b650f610bfcb:/tmp/openclaw$ ls
openclaw-2026-04-16.log

并且注意到默认进入容器的用户名称是node,查询其id明确权限,后面创建的映射目录需要相应授权,可见node是uid=1000的普通用户。

node@b650f610bfcb:/tmp/openclaw$ id
uid=1000(node) gid=1000(node) groups=1000(node)

1、在docker所在宿主机上准备映射容器openclaw主目录的本地目录

mkdir -p /openclaw-work/openclaw_home/
sudo chown -R 1000:1000 /openclaw-work/openclaw_home/

mkdir -p /openclaw-work/openclaw_rollinglog
sudo chown -R 1000:1000 /openclaw-work/openclaw_rollinglog/

本地目录与映射的容器目录对应关系如下:

本地的/openclaw-work/openclaw_home/映射到:容器的/home/node/.openclaw

本地的/openclaw-work/openclaw_rollinglog映射到:容器的/tmp/openclaw

确保本地(docker宿主机)目录的属主为 1000:1000(即容器内的 node 用户)

小窍门:

为什么不映射/home/node/整个目录 ,而细化映射到/home/node/.openclaw,因为后面docker run -v /openclaw-work/openclaw_home/:/home/node/会报错,目前认为最大可能是与镜像里的Entry-point启动脚本里的路径存在冲突。

2.4 docker run启动容器:初始化

初始化是指:让容器运行起来后产生openclaw.json文件映射到本地目录(注意一定要有-rm参数,这样setup产生文件后容器自动退出清除),这样以后不用docker exec -it 到容器里修改,而是可以直接修改本地路径的openclaw.json。

docker run --rm -v /openclaw-work/openclaw_home/:/home/node/.openclaw ghcr.io/openclaw/openclaw:2026.4.12 openclaw setup
返回结果:
Wrote ~/.openclaw/openclaw.json
Workspace OK: ~/.openclaw/workspace
Sessions OK: ~/.openclaw/agents/main/sessions

进入本地目录查看,确认容器包含openclaw.json的主目录和滚动日志目录映射成功:

root@minio-docker:/# cd /openclaw-work/
root@minio-docker:/openclaw-work# ls
openclaw_home  openclaw_rollinglog
root@minio-docker:/openclaw-work# cd openclaw_home/
root@minio-docker:/openclaw-work/openclaw_home# ls
agents  logs  openclaw.json  workspace
root@minio-docker:/openclaw-work/openclaw_home# cat openclaw.json
{
  "agents": {
    "defaults": {
      "workspace": "/home/node/.openclaw/workspace"
    }
  },
  "gateway": {
    "mode": "local"
  },
  "meta": {
    "lastTouchedVersion": "2026.4.12",
    "lastTouchedAt": "2026-04-17T03:55:02.883Z"
  }
}

可见openclaw自带的初始化openclaw.json配置很简化。另外镜像滚动日志还没产生,需要后继容器正式运行才能生成。

2.5 容器启动openclaw网关:正式运行

docker run -d --restart=unless-stopped --name openclaw -p 18789:18789 -v /openclaw-work/openclaw_home/:/home/node/.openclaw -v /openclaw-work/openclaw_rollinglog:/tmp/openclaw ghcr.io/openclaw/openclaw:2026.4.12

**只映射openclaw主目录(含配置文件openclaw.json、workspace等)到本地磁

**如忘了参数如--restart=always(任何情况都拉起容器确保容器始终运行)、--restart=unless-stopped(除非手动停止容器否则任何情况都拉起容器),从其可以用docker update热修改:docker update --restart=always 容器名或ID。

启动后,滚动日志也被创建并映射到了本地相应目录下:

确认openclaw容器运行正常(STATUS一列显示(healthy)

docker ps

2.6 从windows宿主机上访问openclaw的WEB UI:

首先,查看openclaw gateway run启动后的openclaw.json:

发现主要新增了2处内容:

1、开启了web ui访问配置:

"controlUi": {
      "allowedOrigins": [
        "http://localhost:18789",
        "http://127.0.0.1:18789"
      ]
    }
2、访问网关的授权模式是token

"auth": {
      "mode": "token",
      "token": "a26e1485fe4ebbc350411eae999b385f54744a922833a867"
    },
其次,梳理下当前网络架构:

windows物理(虚拟机的宿主机,相关的ip=192.168.174.1)-->VMware虚拟机(docker的宿主机,ip=192.168.174.31)-->openclaw容器(桥接网络:ip=172.17.0.2),那么要想访问容器里的openclaw web ui需要在windows主机上做映射:

ssh -N -L 18789:127.0.0.1:18789 root@192.168.174.31

初次访问虚拟机会询问,输入yes;然后输入虚拟机主机的root密码,之后一致保持CMD窗口不要关闭

在window宿主机浏览器访问:http://127.0.0.1:18789,成功显示WEB UI如下:默认web ui不会自动带openclaw.json里的token,因此会报错:device token mismatch

在docker宿主机也就是VMware虚拟机上查看openclaw.json

粘贴token到UI界面的“网关令牌”框里:

然后点击“连接”按钮,成功登录对话界面如下:

因为没有配置任何有效的API也就没有模型可用,这是输入问题,会出现提示因为没有配置任何有效的API也就没有模型可用,这是输入问题,会出现提示

2.7 设置AI模型(调用API Key)-以deepseek为例

2.7.1 在deepseek开发api平台注册并充值

访问https://platform.deepseek.com/api_keys

点击“创建API key”:

点击复制API key,等下在openclaw里配置时粘贴这个API key!

2.7.2 openclaw引导页配置deepseek API

 docker exec -it openclaw openclaw onboard

选择QuickStart

选择Use existing values

在provider/model里选DeepSeek

输入刚才复制的deepseek的API key,之后等待一段时间:

选择default默认的具体模型:

下一步的选择channel频道可以先跳过

这时openclaw.jsonh会被写入新的配置并造成openclaw容器停止,因为docker run启动参数有--restart=unless-stopped会被自动拉起恢复运行

此时,windows宿主机的浏览器web ui显示:网关重启

再点击“连接”,报错:连接不上!

确认windows的CMD里的映射没有中断:

那么,回到虚拟机查看openclaw.json的配置:

确认token没有变化,与web ui登录页面里token一致(这是因为刚才引导页配置选了Use existing values所以token保持不变),

小窍门:

此时注意到配置里新增的一句内容:

"bind": "loopback",

需要修改:"bind": "lan",

保存后,重启openclaw容器:

docker restart openclaw

等容器状态稳定后,重新在windows宿主机刷新浏览器页面的http://127.0.0.1:18789页面,成功登录:在对话框输入/model,得到回复显示当前模型为deepseek-chat

至此,docker run方式部署openclaw成功!

后继使用注意:

1、以上docker run参数可支持文字/图片的交互,如果后期需要实现语音等交互,需要openclaw获取宿主机的声卡等设备权限,需要进一步复杂docker run参数才能实现。

2、-v映射的目录不包括openclaw的skill等,这样在容器里安装了skill或者其他文件,一旦容器删除重新docker run后,会造成skill丢失,需要重新安装。需要更复杂的高可用方案配置如删除前需要迁移openclaw容器。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐