大家好,这篇文章完整记录了我在 2026 年 3 月,从一个空白的 Docker 容器开始,一步步搭建 OpenClaw(2026.3.2 版本)+ Ollama 的全过程。整个过程遇到了大量实际问题(尤其是 Gateway 启动、配置生效、模型识别等),也把所有坑和解决方案都写出来了,希望能帮到同样在 Docker 环境里折腾的朋友。
最终目标:用 tmux 保活 TUI,在终端里愉快地使用本地 Ollama 模型(例如 lfm2:24b-a2b、qwen2.5:7b 等)。
环境与前提
- 宿主机:任意支持 Docker 的系统
- 容器镜像:archlinux:latest
- OpenClaw 版本:2026.3.2 (85377a2)
- Ollama:部署在宿主机或另一台机器(IP: 192.168.1.3:11434)
- 容器启动命令(关键:映射 Ollama 端口)
docker run -it --name claw1 -p 11434:11434 archlinux:latest /bin/bash
进入容器后先更新并安装基础工具:
pacman -Syu --noconfirm
pacman -S --noconfirm base-devel git curl wget sudo which tmux net-tools
步骤 1:安装 NVM + Node.js LTS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
nvm use --lts
nvm alias default lts/*
验证:
node -v # 应显示 v20.x 或 v22.x
步骤 2:安装 OpenClaw(跳过 onboarding)
curl -fsSL https://openclaw.ai/install.sh | bash
# 或 npm install -g openclaw@latest
openclaw --no-onboard
步骤 3:Ollama 推荐分离部署(网络连接方式)
强烈建议:不要在同一个容器里同时跑 OpenClaw 和 Ollama。
我在宿主机(或另一台服务器)运行 Ollama:
# 宿主机执行
curl -fsSL https://ollama.com/install.sh | sh
ollama serve &
ollama pull lfm2:24b-a2b
ollama pull qwen2.5:7b
ollama pull llama3.1:8b
ollama pull deepseek-coder-v2:16b
容器内连接配置:
openclaw config set models.providers.ollama.baseUrl "http://192.168.1.3:11434"
openclaw config set models.providers.ollama.apiKey "ollama-local-dummy"
openclaw config set models.providers.ollama.api "ollama"
手动指定模型列表(绕过自动发现 bug):
openclaw config set models.providers.ollama.models '[
{"id": "lfm2:24b-a2b", "name": "LFM2 24B A2B"},
{"id": "qwen2.5:7b", "name": "Qwen 2.5 7B"},
{"id": "llama3.1:8b", "name": "Llama 3.1 8B"},
{"id": "deepseek-coder-v2:16b", "name": "DeepSeek Coder V2"}
]'
设置默认模型:
openclaw config set agents.defaults.model.primary "ollama/lfm2:24b-a2b"
步骤 4:最常见的启动坑与解决
坑 1:gateway restart 依赖 systemd 失败
openclaw gateway restart
# 报错:systemctl --user is-enabled unavailable
Docker 容器内没有 systemd,所以所有依赖 systemctl 的命令都会失败。
正确做法:直接手动启动 Gateway
openclaw gateway --verbose
# 或后台 + tmux
tmux new -s gateway
openclaw gateway --verbose
# detach: Ctrl+b d
坑 2:Gateway start 被 blocked(2026 版本安全检查)
Gateway start blocked: set gateway.mode=local (current: unset) or pass --allow-unconfigured.
解决:
openclaw config set gateway.mode local
openclaw gateway --verbose
坑 3:TUI 连接失败(gateway disconnected: closed)
原因:Gateway 根本没跑起来。
解决:先确保 Gateway 在运行(用 tmux 保活),再开 TUI:
tmux attach -t gateway # 查看是否在跑
openclaw tui
步骤 5:模型识别坑(anthropic 前缀鬼故事)
最崩溃的一幕:
TUI 显示模型为 anthropic/lfm2:24b-a2b → Unknown model
原因:OpenClaw 默认会给模型名加 anthropic/ 前缀,除非明确指定 ollama/ provider。
解决(在 TUI 里立即生效):
/model ollama/lfm2:24b-a2b
永久设置(CLI):
openclaw config set agents.defaults.model.primary "ollama/lfm2:24b-a2b"
切换后状态栏变为:
connected | idle
agent main | session main (openclaw-tui) | ollama/lfm2:24b-a2b | tokens ?/33k
成功回复:
你好!我是你的开放式AI助手。很高兴认识你。……
步骤 6:安全加固(别忘了)
运行审计:
openclaw security audit
常见高危项及修复:
# 解决两个 CRITICAL
openclaw config set gateway.auth.token "$(openssl rand -base64 32)"
openclaw gateway --verbose # 重启生效
# 修复权限
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/*.json
最终状态栏解释(很多人问)
connected | idle
agent main | session main (openclaw-tui) | ollama/lfm2:24b-a2b | tokens ?/33k
- connected | idle:已连接网关,当前空闲
- agent main:使用 main 智能体
- session main (openclaw-tui):会话名为 main,通过 TUI 访问
- ollama/lfm2:24b-a2b:当前模型
- tokens ?/33k:已用 token 未知 / 上下文最大 33k token
小结 & 经验教训
- Docker 容器里不要依赖
openclaw gateway restart/start/install等命令,直接openclaw gateway --verbose或 tmux 后台跑。 - 必须设置
gateway.mode local,否则启动被 block。 - 本地模型一定要写全
ollama/模型名,否则被强制加 anthropic/ 前缀导致 Unknown model。 - Gateway 配置变更后,重启容器(
docker restart claw1)是最暴力但最可靠的生效方式。 - TUI + tmux 是最舒服的长期使用方式。
现在我已经在容器里稳定运行 lfm2:24b-a2b 了,响应速度和质量都超出预期。
希望这篇记录能帮你少走弯路。
有问题欢迎留言或直接问我~
🦞 Happy clawing!