Clawdbot部署教程:Qwen3:32B与Clawdbot共用Docker网络及端口映射配置
1. 为什么需要共用Docker网络和端口映射
Clawdbot作为AI代理网关与管理平台,本身不直接运行大模型,而是通过API调用后端模型服务。当你在本地部署了Qwen3:32B模型(通过Ollama),Clawdbot需要能稳定、低延迟地访问这个服务。如果两者运行在独立的Docker容器中,默认是隔离网络,Clawdbot容器根本无法通过http://127.0.0.1:11434访问到Ollama服务——因为对Clawdbot容器来说,“localhost”指的是它自己,而不是宿主机。
很多新手会卡在这一步:明明Ollama在宿主机上跑得好好的,curl http://localhost:11434/api/tags能返回模型列表,但Clawdbot配置里填了http://127.0.0.1:11434/v1却一直报错“Connection refused”。这不是Clawdbot的问题,也不是Ollama没启动,而是典型的容器网络通信误解。
解决这个问题的核心思路就两个:要么让Clawdbot容器能访问宿主机的Ollama服务(通过特殊网络模式),要么让Ollama也跑在Docker里,并和Clawdbot放在同一个自定义网络中——后者更规范、更可控,也更适合生产环境。本教程采用第二种方式,手把手带你完成从零开始的双容器协同部署。
2. 环境准备与基础依赖安装
2.1 确认系统要求
- 操作系统:Ubuntu 22.04 LTS 或 CentOS 8+(推荐 Ubuntu,文档适配最完善)
- 硬件:至少24GB GPU显存(Qwen3:32B最低要求),CPU 8核,内存32GB+
- 软件:Docker 24.0+、Docker Compose v2.20+、NVIDIA Container Toolkit(已配置GPU支持)
注意:如果你还没装好NVIDIA驱动和nvidia-docker,请先执行
nvidia-smi确认驱动正常,再按官方指南配置runtime。本文默认你已具备GPU容器运行能力。
2.2 创建项目目录并初始化配置文件
我们不使用clawdbot onboard一键脚本,因为它默认走单机模式,无法精细控制网络。我们要手动构建可复用的部署结构:
mkdir -p ~/clawdbot-qwen3 && cd ~/clawdbot-qwen3创建docker-compose.yml,这是整个协同部署的核心:
# docker-compose.yml version: '3.8' services: # Ollama服务:运行Qwen3:32B模型 ollama: image: ollama/ollama:latest container_name: ollama-qwen3 restart: unless-stopped ports: - "11434:11434" volumes: - ./ollama_models:/root/.ollama/models - ./ollama_logs:/var/log/ollama environment: - OLLAMA_HOST=0.0.0.0:11434 - OLLAMA_ORIGINS=http://clawdbot:3000,http://localhost:3000 networks: - clawdbot-net deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] # Clawdbot服务:AI代理网关与管理平台 clawdbot: image: ghcr.io/clawdbot/clawdbot:latest container_name: clawdbot-main restart: unless-stopped ports: - "3000:3000" volumes: - ./config:/app/config - ./data:/app/data environment: - NODE_ENV=production - CLAWDBOT_PORT=3000 - CLAWDBOT_HOST=0.0.0.0 - CLAWDBOT_TOKEN=csdn depends_on: - ollama networks: - clawdbot-net # 关键:让Clawdbot能调用ollama服务,必须在同一网络下 # 容器内可通过服务名"ollama"直接访问,无需IP networks: clawdbot-net: driver: bridge ipam: config: - subnet: 172.20.0.0/16这个配置做了几件关键事:
- 定义了一个名为
clawdbot-net的自定义桥接网络,两个容器都接入其中; - Ollama容器暴露端口
11434,Clawdbot容器暴露端口3000; - Clawdbot通过
depends_on声明依赖Ollama,确保启动顺序; - 最重要的是:Clawdbot容器内部可以直接用
http://ollama:11434/v1访问Ollama API——因为Docker内置DNS会把服务名ollama解析为该容器在clawdbot-net中的IP。
2.3 初始化Clawdbot配置文件
Clawdbot需要一个config.json来告诉它后端模型在哪。在项目根目录下创建config文件夹,并写入config/config.json:
{ "models": [ { "id": "qwen3:32b", "name": "Local Qwen3 32B", "baseUrl": "http://ollama:11434/v1", "apiKey": "ollama", "api": "openai-completions", "reasoning": false, "input": ["text"], "contextWindow": 32000, "maxTokens": 4096, "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } } ], "defaultModel": "qwen3:32b", "token": "csdn" }注意这里baseUrl不再是http://127.0.0.1:11434/v1,而是http://ollama:11434/v1——这是容器间通信的正确写法。
3. 部署与启动全流程
3.1 拉取镜像并首次加载Qwen3:32B模型
别急着docker-compose up。Ollama容器启动后,需要先手动加载模型,否则Clawdbot一上来就调用会失败。
# 启动Ollama容器(后台运行) docker-compose up -d ollama # 等待10秒让Ollama服务就绪 sleep 10 # 进入Ollama容器,拉取并运行Qwen3:32B docker exec -it ollama-qwen3 ollama run qwen3:32b # 第一次运行会下载约20GB模型文件,耗时较长,请耐心等待 # 下载完成后,你会看到类似这样的输出: # >>> Running qwen3:32b # >>> Loading model... # >>> Model loaded in 12.4s小技巧:如果你网络慢,可以提前在宿主机用
ollama pull qwen3:32b下载好,再启动容器。Ollama会自动复用已下载的模型文件。
3.2 启动Clawdbot并验证连通性
现在启动全部服务:
docker-compose up -d查看状态:
docker-compose ps你应该看到两个服务都是Up状态。接着验证Clawdbot是否能成功调用Ollama:
# 进入Clawdbot容器 docker exec -it clawdbot-main sh # 在容器内测试Ollama连通性(Ctrl+D退出) curl -X POST http://ollama:11434/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3:32b", "messages": [{"role": "user", "content": "你好,请用中文简单介绍你自己"}], "stream": false }'如果返回了JSON格式的响应(包含message.content字段),说明网络打通成功
如果报Failed to connect,请检查:
docker-compose ps中ollama是否健康;docker logs ollama-qwen3是否有启动错误;docker network inspect clawdbot-net是否两个容器都在该网络中。
3.3 访问Web界面并完成Token配置
打开浏览器,访问:
http://localhost:3000/?token=csdn注意:必须带
?token=csdn,这是Clawdbot的管理令牌,和你在config.json中设置的一致。没有这个token,你会看到“unauthorized: gateway token missing”的错误提示。
首次进入后,你会看到Clawdbot的控制台界面。点击左上角Settings → Models,确认Local Qwen3 32B已显示为“Online”,状态灯为绿色。
现在你可以直接在聊天窗口输入问题,比如:“用Python写一个快速排序函数”,Clawdbot会将请求转发给Ollama容器中的Qwen3:32B模型,并把结果返回给你——整个链路完全走Docker内部网络,毫秒级延迟,稳定不掉线。
4. 关键配置详解与常见问题排查
4.1 端口映射的三种模式对比
| 模式 | 写法 | 适用场景 | 是否推荐 |
|---|---|---|---|
11434:11434 | 宿主机端口 ↔ 容器端口 | 需要从宿主机或外部调试Ollama | 推荐(方便curl测试) |
11434 | 仅容器端口,不映射到宿主机 | 纯内部调用,完全隔离 | 可行但不便于排障 |
127.0.0.1:11434:11434 | 仅绑定到本地回环 | 宿主机可访问,但其他机器不可见 | 生产推荐(更安全) |
我们在docker-compose.yml中用了第一种,方便你随时用curl http://localhost:11434/api/tags查模型状态。上线后建议改为第三种。
4.2 为什么Clawdbot配置里不能写localhost
这是新手最高频的误区。再次强调:
- 在宿主机终端里,
localhost=127.0.0.1= 本机; - 在Clawdbot容器里,
localhost= 它自己(一个空的、没跑服务的容器); - 在Clawdbot容器里,
ollama= Ollama容器在clawdbot-net中的IP(如172.20.0.2),这是Docker DNS自动解析的。
所以永远记住:容器间通信,用服务名;宿主机访问容器,用localhost:端口;容器访问宿主机,用host.docker.internal(仅Docker Desktop)或宿主机真实IP。
4.3 常见报错与速查解决方案
| 报错信息 | 根本原因 | 一行修复命令 |
|---|---|---|
Connection refusedwhen calling ollama from clawdbot | Clawdbot容器无法访问Ollama容器 | docker-compose restart clawdbot(确保Ollama已先启动) |
model not found: qwen3:32b | Ollama容器内未加载模型 | docker exec ollama-qwen3 ollama run qwen3:32b |
unauthorized: gateway token missing | URL缺少token参数 | 改为http://localhost:3000/?token=csdn |
GPU memory exhaustedon qwen3:32b | 显存不足,Ollama默认未启用GPU卸载 | 在docker-compose.yml的ollama服务下添加:environment:- OLLAMA_GPU_LAYERS=99 |
Error response from daemon: could not select device driver | NVIDIA Container Toolkit未安装或未启用 | sudo systemctl restart docker && sudo nvidia-ctk runtime configure --runtime=docker |
关于GPU加速:Qwen3:32B在24G显存上运行吃紧。加
OLLAMA_GPU_LAYERS=99强制所有层都走GPU,能显著提升推理速度。你也可以在ollama run时加参数:ollama run --num-gpu 1 qwen3:32b
5. 进阶技巧:让部署更健壮、更易维护
5.1 模型热更新不重启Clawdbot
Clawdbot支持运行时重载模型配置。当你新增一个模型(比如qwen3:72b),只需:
- 在宿主机执行:
docker exec ollama-qwen3 ollama run qwen3:72b - 修改
config/config.json,追加新模型配置项 - 发送SIGHUP信号重载配置:
docker kill -s HUP clawdbot-mainClawdbot会在日志中打印Config reloaded successfully,无需docker-compose restart,业务零中断。
5.2 日志集中查看与问题定位
把两个容器的日志合并在一个流里看,效率翻倍:
# 查看最近100行混合日志 docker-compose logs -f --tail=100 | grep -E "(ollama\|clawdbot\|error\|failed)" # 单独看Ollama推理耗时(关键性能指标) docker logs ollama-qwen3 2>&1 | grep "evaluated" | tail -20 # 输出示例:[GIN] 2024/06/15 - 14:23:01 | 200 | 3.2452s | 127.0.0.1 | POST "/api/chat"5.3 备份与迁移:三步带走整个环境
你的部署不是黑盒,所有数据都落盘在项目目录:
- 模型文件:
./ollama_models/(Ollama模型二进制) - Clawdbot数据:
./data/(会话记录、用户配置等) - 配置文件:
./config/config.json+./docker-compose.yml
迁移时,只需把整个~/clawdbot-qwen3文件夹拷贝到新机器,执行:
docker-compose down && docker-compose up -d5秒内恢复全部服务,真正的“所见即所得”。
6. 总结:一次配置,长期受益
你现在已经完成了Clawdbot与Qwen3:32B的深度集成部署。这不是简单的“能跑就行”,而是构建了一个生产就绪的AI代理基础设施:
- 两个服务运行在同一个Docker网络,通信高效、隔离安全;
- 端口映射清晰明确,宿主机可调试、容器间可直连;
- 配置文件集中管理,模型增删灵活,支持热更新;
- 全流程覆盖GPU加速、日志追踪、故障排查、备份迁移。
接下来,你可以基于这个底座做更多事情:接入RAG插件增强知识库、挂载向量数据库实现语义检索、用Clawdbot的扩展系统开发自定义工具……而这一切,都建立在今天你亲手打通的这条稳定、低延迟的模型调用链路上。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。