电视剧《拖车公园男孩第十二季》剧情说明
2026-08-04 3439658
2026-08-04 0
一文教你OpenClaw Docker 部署并调用本地Qwen3.5 9B模型的重点在于把前置条件、操作顺序和容易误判的地方分清楚。
本文记录我在 Ubuntu 24.04.2 LTS 上,用 Docker 部署 Ollama(下载并运行 qwen3.5:9b-q8_0 模型),再把它接入 OpenClaw 的完整过程。
如果你也想在本地跑千问(Qwen)并用 OpenClaw 的 Web UI 进行对话/测试,可以按本文一步步做完。
nvidia-smiwatch -n 1 nvidia-smi

如果 nvidia-smi 没有输出(或提示找不到命令),一般是驱动没装好;如果输出里显示的驱动版本较低,建议先升级驱动再继续。
docker -v

如果没有版本信息,先安装 Docker:
# 快速安装 Docker(如未安装)curl -fsSL https://get.docker.com | sh# 启动 Docker 并设置开机自启sudo systemctl start dockersudo systemctl enable docker# 验证 Dockerdocker --version
Ollama 常见有两种安装/启动方式:Docker 版 和 系统服务版(systemctl)。核心差异如下:
| 维度 | Docker 版 Ollama | 系统服务版 Ollama(systemctl) |
|---|---|---|
| 运行环境 | 运行在容器里,依赖 Docker | 直接运行在系统里,无容器隔离 |
| GPU 使用 | 需要 --gpus all 显式启用 GPU | 直接使用主机 GPU(前提是驱动正常) |
| 数据位置 | 容器内 /root/.ollama(通常用 Docker 卷持久化) | 主机 ~/.ollama(普通用户)或 /root/.ollama(root) |
| 端口 | 通常映射主机 11434 | 默认直接占用主机 11434 |
| 冲突风险 | 端口映射相同会冲突 | 直接占用端口,容易与 Docker 版冲突 |
我这里 推荐 Docker 版:更好迁移、更好维护(尤其是你后面还要跑 OpenClaw 时)。
sudo systemctl stop ollamasudo systemctl disable ollama
如果你没有安装过系统服务版,这两条命令可能会提示 “Unit ollama.service not found”,可以忽略。
下面用 Docker 卷来保存模型与缓存,好处是:删容器不丢模型。
docker run -d --name ollama --restart=always --gpus all -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest
注意点:
如果你在这里看到类似报错:could not select device driver "" with capabilities: [[gpu]],说明 Docker 还没配置好 NVIDIA GPU 运行时(通常需要安装 NVIDIA Container Toolkit)。这类问题建议先按 NVIDIA 官方文档把 nvidia-container-toolkit 配好,再继续。
# 1) 容器是否在运行(看到 Up 即正常)docker ps --filter "name=ollama"# 2) 端口是否可访问(返回 "Ollama is running" 即成功)curl http://127.0.0.1:11434
这里有一个容易踩坑的点:如果你用的是 Docker 版 Ollama,那么 ollama pull/list 这些命令应该在容器里执行(除非你额外在宿主机也安装了 Ollama 命令行)。
docker exec -it ollama ollama pull qwen3.5:9b-q8_0
如果拉取完成,列出模型确认一下:
docker exec -it ollama ollama list

然后跑一个简单对话,确认模型能正常工作:
docker exec -it ollama ollama run qwen3.5:9b-q8_0

看到能正常输出,同时 nvidia-smi 里 GPU 有占用,就说明 Ollama + GPU 没问题。

推荐按这个顺序升级(数据卷会保留,不会丢模型):
# 1) 拉取最新版镜像docker pull ollama/ollama:latest# 2) 停止并删除旧容器(仅删除容器实例,卷数据会保留)docker stop ollamadocker rm ollama# 3) 用新镜像重新启动容器docker run -d --name ollama --restart=always --gpus all -p 11434:11434 -v ollama:/root/.ollama ollama/ollama:latest
下面以 ~/openclaw-docker 为例(你也可以换成其它目录):
mkdir -p ~/openclaw-dockercd ~/openclaw-docker# 创建数据卷:持久化 OpenClaw 的配置与数据docker volume create openclaw-data
如果你确定要清空 OpenClaw 的所有配置(会丢失 gateway token、模型配置等),再执行:
docker volume rm openclaw-data
默认情况下,Docker 部署 OpenClaw 时,root 与非 root(node)用户使用的配置目录不一样:
/root/.openclaw/root/.openclaw/sandboxes/home/node/.openclaw/home/node/.openclaw/sandboxes关键区别(用一句话记住就行):你 configure 用谁,后面运行容器也要用同一个用户,否则很容易出现权限/找不到配置的问题。
本文后续统一使用 --user root,所以挂载路径都以 /root/.openclaw 为准。
docker run -it --rm --user root --net=host -v openclaw-data:/root/.openclaw ghcr.io/openclaw/openclaw:latest openclaw configure



建议这样填(按你的实际情况替换):
openclaw configure 时加了 --net=host:可以填 http://127.0.0.1:11434/v1--net=host:不要填 127.0.0.1,改填宿主机 IP,比如 http://192.168.1.18:11434/v1sk-123456ollama list 里显示的模型名,例如 qwen3.5:9b-q8_0(不要拼错)
注意:Endpoint ID 建议填写 ollama。如果你填了别的名字,可能会在 Web UI 发送消息时出现类似报错:
Agent failed before reply: No API key foun d for provider "custom-..."....

Gateway bind mode、Gateway auth、Tailscale exposure、Gateway token source 先按向导的推荐/默认选项来即可(如果你只是本机使用,一般不需要太复杂的暴露方式)。
这里最重要的一件事:记下 Gateway token(它相当于你的 Web UI 连接口令)。
完成后选择 continue 结束配置:

在你刚才的工作目录里执行(这样 $(pwd) 就是你的 workspace):
docker run -d --name openclaw --net=host --user root -v openclaw-data:/root/.openclaw -v "$(pwd)":/root/.openclaw/workspace -v /var/run/docker.sock:/var/run/docker.sock --restart unless-stopped ghcr.io/openclaw/openclaw:latest
说明:
-v "$(pwd)":/root/.openclaw/workspace:把宿主机当前目录挂到容器里当 workspace,方便你在主机上直接管理文件。-v /var/run/docker.sock:/var/run/docker.sock:允许 OpenClaw 调用宿主机 Docker(有安全风险,仅建议在你信任的本机环境使用)。浏览器打开:http://127.0.0.1:18789
如果出现需要令牌的页面,把你在配置阶段记录的 Gateway token 填进去即可:


常见原因之一:你 configure 时用的用户,和 docker run 运行时用的用户不一致(比如一个是 root,一个是 node),导致读取到的配置目录不同。
你也可以先用下面命令打印出 OpenClaw 的 dashboard 地址(不会自动打开浏览器):
docker exec -it openclaw openclaw dashboard --no-open

你可以开着 watch -n 1 nvidia-smi,然后在 Web UI 发几条消息,观察显存/利用率是否上涨。

--gpus all 失败)。