Windows 10 Docker 部署 OpenClaw 手记:从踩坑到丝滑调用外部大模型

本文首发于 https://blog.okwujun.pw

最近,我需要在 Windows 10 上搭建一个 AI 助手平台——OpenClaw。核心要求很明确:用 Docker 部署,并且不装本地大模型,只通过配置 URL 来调用公司内网已有的模型服务。本以为半小时能搞定的事,结果折腾了整整一个下午。从 WSL 装不上 Ubuntu,到 Docker 拉取镜像超时,再到 OpenClaw 怎么都连不上…… 好在最后都解决了。

这篇文章不仅是一份操作指南,更是一份避坑实录。希望能让后来者少走些弯路,半小时内跑起来。


一、写在前面:为什么这么折腾?

OpenClaw 是一个强大的 AI 网关,可以统一管理各种模型 API。官方推荐用 Docker 部署,而 Docker 在 Windows 上最舒服的方式就是搭配 WSL 2

我原本计划用 Ubuntu 22.04,结果 wsl --install -d Ubuntu-22.04 死活装不上(公司网络限制)。无奈之下,我装了个 Oracle Linux 7.9——一个企业级 Linux,虽然小众,但作为 Docker 后端完全没问题。这也为后续埋下了一些“惊喜”。


二、环境准备:打好地基

1. 启用 WSL 2 并安装 Linux 发行版

以管理员身份打开 PowerShell,执行:

# 启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 设置 WSL 2 为默认版本
wsl --set-default-version 2

# 重启电脑后,安装你喜欢的发行版(我用了 Oracle Linux 7.9)
wsl --install -d OracleLinux_7_9

小贴士:如果你能顺利装 Ubuntu,那是最好的。如果不行,任何主流发行版(包括 Oracle Linux)都可以。

2. 安装 Docker Desktop

Docker 官网 下载安装包。安装时务必勾选 “Use WSL 2 instead of Hyper-V”

安装后,打开 Docker Desktop,进入 Settings → Resources → WSL Integration,把你装的 Linux 发行版(比如 OracleLinux_7_9)的开关打开,点击 Apply & Restart

验证一下:打开你的 WSL 终端(比如直接输入 wsl 进入),执行 docker version,如果能看到客户端和服务端信息,说明集成成功。


三、第一道坎:Docker 拉取镜像超时

高高兴兴准备拉取 OpenClaw 镜像,结果:

docker pull openclaw/openclaw:latest
Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

网络问题!公司网络屏蔽了 Docker Hub。解决方案有两条路:

方案 A:配置 Docker 镜像加速器(推荐)

我用的阿里云加速器,免费且稳定。注册阿里云后,访问 容器镜像服务控制台,找到“镜像加速器”,会得到一个专属地址,例如 https://xxxxx.mirror.aliyuncs.com

然后在 Docker Desktop 的 Settings → Docker Engine 中,编辑 registry-mirrors

{
  “registry-mirrors”: [
    “https://xxxxx.mirror.aliyuncs.com”
  ]
}

点击 Apply & Restart 后,再拉取镜像,速度飞起。

方案 B:使用代理(适合有代理的环境)

如果你有 HTTP 代理,可以在 Docker Desktop 的 Settings → Resources → Proxies 中配置。注意 WSL 内的代理地址要写 Windows 主机的 IP(通常是 172.x.x.1),而不是 127.0.0.1


四、部署 OpenClaw:用 Docker Compose 一键启动

创建项目目录和 docker-compose.yml

mkdir ~/openclaw && cd ~/openclaw
nano docker-compose.yml

写入以下内容:

version: ‘3.8’
services:
  openclaw:
    image: 1panel/openclaw:2026.3.12-beta   # 我用的是这个镜像,你也可以用官方 openclaw/openclaw
    container_name: openclaw-container
    ports:
      - “0.0.0.0:18789:18789”               # 映射到所有接口,方便宿主机访问
    volumes:
      - ~/.openclaw:/home/node/.openclaw    # 挂载配置目录,数据持久化
    environment:
      - TZ=Asia/Shanghai
    restart: always

启动:

docker compose up -d

查看日志:

docker logs -f openclaw-container

如果看到类似这样的输出,说明容器启动成功,但可能还没法访问:

[gateway] listening on ws://127.0.0.1:18789

五、第二道坎:浏览器访问不了(空响应)

我在 Windows 浏览器打开 http://127.0.0.1:18789,却显示“该网页无法正常运作”。在 WSL 内 curl 也返回空。

问题根源:OpenClaw 默认只监听容器内的 127.0.0.1,虽然做了端口映射,但外部连接被拒绝。

解决方法:修改 OpenClaw 的配置文件,让它监听 0.0.0.0

1. 找到配置文件

配置文件挂载在 ~/.openclaw/openclaw.json。如果没有这个文件,容器第一次启动时会自动生成。

2. 修改监听地址

编辑 ~/.openclaw/openclaw.json

nano ~/.openclaw/openclaw.json

找到 gateway 部分,添加或修改为:

“gateway”: {
  “auth”: {
    “mode”: “token”,
    “token”: “你的实际token”      # 这里会自动生成,不要改
  },
  “bind”: “lan”,                  # 监听所有网络接口
  “controlUi”: {
    “allowedOrigins”: [             # 允许访问的来源
      “http://localhost:18789”,
      “http://127.0.0.1:18789”,
      “http://你的WSL-IP:18789”     # 可以通过 hostname -I 查看
    ]
  }
}

注意:新版 OpenClaw 已经废弃了 “bind”: “0.0.0.0” 这种写法,改用模式化的 “lan”(局域网)、“loopback”(本机)等。

保存后重启容器:

docker compose restart

再看日志,应该会出现:

[gateway] listening on ws://0.0.0.0:18789

这时在 Windows 浏览器访问 http://127.0.0.1:18789,就能看到登录页面了!


六、配置外部大模型:实现“URL 接口”

在登录页面输入你的 token(可以在 ~/.openclaw/openclaw.json 中找到 gateway.auth.token 的值),进入主界面后,你会发现默认模型是 anthropic/claude-opus-4-6,这不是我们想要的。

我们需要在配置文件中添加自己的模型提供商。

再次编辑 ~/.openclaw/openclaw.json,在 models 部分添加:

“models”: {
  “providers”: {
    “my-qwen”: {                                    // 自定义名称
      “baseUrl”: “http://192.168.10.142:5601/qwen3.5-397B.v4-idc1/v1”,
      “apiKey”: “noneed”,                           // 无需密钥的服务
      “api”: “openai-chat”,                          // API 类型
      “models”: [
        {
          “id”: “qwen3.5-397B”,                      // 模型 ID,必须与服务端一致
          “name”: “Qwen 3.5 397B”
        }
      ]
    }
  },
  “mode”: “merge”
},
“agents”: {
  “defaults”: {
    “model”: {
      “primary”: “my-qwen/qwen3.5-397B”              // 设置为默认模型
    }
  },
  “list”: [
    {
      “id”: “main”,
      “default”: true,
      “model”: “my-qwen/qwen3.5-397B”
    }
  ]
}

保存后重启容器。现在日志里会显示:

[gateway] agent model: my-qwen/qwen3.5-397B

大功告成!现在你可以愉快地和你的大模型对话了。


七、避坑指南(小白必看)

  1. WSL 发行版选择:尽量用 Ubuntu,遇到问题更容易搜到答案。如果非要用 Oracle Linux,记得启用 ol7_addons 仓库来装 Docker 引擎(但我们是 Docker Desktop,所以这条忽略)。
  2. 端口映射:如果容器内服务只监听 127.0.0.1,端口映射会失效。务必确保服务监听 0.0.0.0 或通过 bind: “lan” 开启。
  3. 配置文件修改:OpenClaw 的配置项是版本敏感的。如果你看到类似 “gateway.bind: ... are legacy” 的提示,说明你用了旧版配置格式,按提示改用新版(比如 “lan”)。
  4. 网络问题:Docker 拉取镜像超时,优先配置国内镜像加速器,比折腾代理简单得多。
  5. 权限问题:如果容器日志报 EACCES: permission denied,说明挂载目录的权限不对。确保宿主机目录(如 ~/.openclaw)对容器内用户(通常是 node,UID 1000)可写。
  6. 容器以root权限运行,方便小龙虾安装环境,例如各种包。
version: '3.8'
services:
  openclaw:
    image: docker.1ms.run/1panel/openclaw:2026.3.12-beta  # 我用的是这个镜像,你也可以用官方 openclaw/openclaw
    container_name: openclaw-container 
    user: root   # 容器内使用root安全相对可控
    ports:  # 映射到所有接口,方便宿主机访问
      - 18789:18789
      - 18790:18790
      - 18791:18791
      - 8443:8443
    volumes:
      - ~/.openclaw:/root/.openclaw   # 挂载配置目录,数据持久化
    environment:
      - TZ=Asia/Shanghai
      - OPENAI_BASE_URL=http://x.x.x.x:x/v1
      - OPENAI_API_KEY=noneed
      - DEFAULT_MODEL=qwen3.5-397B
    restart: always

八、结语

从最初 WSL 安装失败,到最后 OpenClaw 成功调用外部模型,这一路踩坑不少,但也学到了很多。OpenClaw 作为一个 AI 网关,确实非常灵活,尤其适合那些不想本地部署大模型、只想通过 API 统一管理多个服务的场景。

希望这篇手记能帮你在 Windows 10 上顺利跑起 OpenClaw。如果你在部署过程中遇到其他问题,欢迎在评论区留言交流。

(完)


附:一些有用的命令速查

# 查看容器日志
docker logs -f openclaw-container

# 进入容器内部
docker exec -it openclaw-container /bin/sh

# 重启容器
docker compose restart

# 查看 WSL IP
hostname -I

# 查看 Docker 端口映射
docker port openclaw-container

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

发表评论