AI编程助手Claude Code、Codex、OpenCode一站式Docker环境
-
- 一、为什么要搭建这样一个环境?
-
- [1.1 背景与动机](#1.1 背景与动机)
- [1.2 你能得到什么](#1.2 你能得到什么)
- 二、相关截图
- 二、整体架构与核心概念
- [三、准备工作(是什么 & 为什么)](#三、准备工作(是什么 & 为什么))
-
- [3.1 基础环境](#3.1 基础环境)
- [3.2 可选:Ollama服务](#3.2 可选:Ollama服务)
- 四、详细操作步骤(如何操作)
-
- 步骤1:如果你在Windows上,先安装WSL(可选)
- 步骤2:安装Docker(如果没有)
- 步骤3:启动Ollama服务(宿主机或外部服务器)
- 步骤4:测试Ollama服务(可选)
- 步骤5:创建并运行Docker容器
- 步骤6:初始化默认配置
- 步骤7:切换模型供应商(以使用本地qwen3.5:9b为例)
- 步骤8:集成飞书机器人(OpenClaw,可选)
-
- [8.1 设置模型及飞书App ID/Secret](#8.1 设置模型及飞书App ID/Secret)
- [8.2 启动网关](#8.2 启动网关)
- [8.3 浏览器访问管理界面](#8.3 浏览器访问管理界面)
- [步骤9:配置Web SSH(easynode,可选)](#步骤9:配置Web SSH(easynode,可选))
-
- [9.1 设置SSH密码并启动SSH服务](#9.1 设置SSH密码并启动SSH服务)
- [9.2 启动easynode](#9.2 启动easynode)
- [9.3 获取自动生成的登录凭据](#9.3 获取自动生成的登录凭据)
- [9.4 浏览器访问](#9.4 浏览器访问)
- 步骤10:使用三款AI编程工具
-
- [10.1 Claude Code](#10.1 Claude Code)
- [10.2 Codex(OpenAI Codex)](#10.2 Codex(OpenAI Codex))
- [10.3 OpenCode](#10.3 OpenCode)
- 步骤11:其他有用命令
-
- [11.1 更新工具到最新版本](#11.1 更新工具到最新版本)
- [11.2 切换不同模型/供应商的示例](#11.2 切换不同模型/供应商的示例)
- [11.3 针对OpenCode的特殊说明](#11.3 针对OpenCode的特殊说明)
- 步骤12:进阶------使用MCP(模型上下文协议)
- 五、常见问题与排错
- 六、结语
你是否好奇过不同AI编程助手(如Claude Code、Codex、OpenCode)在处理同一个任务时的表现差异?想知道它们谁更聪明、谁更省token、谁更适合你的工作流?本文将搭建一个开箱即用的对比实验环境,让你能在同一台机器上、使用同一个模型(甚至同一份提示词),快速切换测试这三款主流AI编程工具。所有服务都运行在Docker容器内,既安全又整洁,还支持通过浏览器访问,方便部署在云端服务器。
一、为什么要搭建这样一个环境?
1.1 背景与动机
AI编程助手正在改变我们写代码的方式。Claude Code(Anthropic出品)、Codex(OpenAI)和OpenCode(开源社区)各有特色。然而:
- 不同工具需要不同的安装和环境配置,容易污染本地系统。
- 在本地运行大模型(比如qwen3.5:9b)需要GPU资源,部署在云端更划算。
- 想对比它们在相同任务下的表现,需要一个可复现、可切换的统一环境。
因此,这里采用Docker方案:
- 隔离性:所有依赖封装在容器里,宿主机干干净净。
- 可访问性:通过Web SSH和Web UI,随时随地用浏览器操作。
- 低成本:默认集成Ollama,可使用本地模型(如qwen3.5:9b),也可切换至云端模型(通过OpenRouter等)。
- 可对比:一个容器内集成了三款主流CLI编程工具,一键切换模型供应商,方便做A/B测试。
1.2 你能得到什么
- 一个运行着SSH服务、Web SSH管理界面(easynode)、三款AI编程工具(Claude Code, Codex, OpenCode)的Docker容器。
- 预配置的Ollama客户端,可以连接本地或远程的Ollama服务,使用任意模型。
- 一套切换模型的Python脚本,支持自定义API地址、模型名、API Key和代理。
- 一个可选集成的飞书机器人(OpenClaw),方便在聊天中调用AI能力。
二、相关截图




二、整体架构与核心概念
在开始操作前,先理解几个关键组件:
| 组件 | 是什么 | 为什么需要 |
|---|---|---|
| Docker | 容器化平台,将应用及其依赖打包成轻量级、可移植的容器 | 隔离环境,避免污染宿主机,方便分发和部署 |
| Ollama | 大模型运行框架,可以本地运行或连接云端模型API | 提供统一的模型访问接口,支持多种模型(本地/云端) |
| Claude Code / Codex / OpenCode | 三款基于终端的AI编程助手 | 对比不同工具在相同模型下的表现 |
| Web SSH (easynode) | 通过浏览器访问容器内终端的工具 | 无需安装SSH客户端,随时随地操作容器 |
| OpenClaw | 连接飞书机器人的AI网关 | 将AI能力接入聊天工具,实现自动化办公 |
| MCP (Model Context Protocol) | 模型上下文协议,允许AI工具调用外部工具(如股票API) | 扩展AI能力,实现与真实世界交互 |
三、准备工作(是什么 & 为什么)
3.1 基础环境
- 一台Linux服务器(或Windows + WSL) :如果你用的是Windows,建议先安装WSL(Windows Subsystem for Linux),体验原生Linux环境。
- 为什么:Docker在Linux上运行最稳定,大多数AI工具也针对Linux优化。
- Docker :容器运行时,我们用它创建和管理容器。
- 为什么:Docker能保证环境一致性,避免"在我电脑上能跑"的问题。
3.2 可选:Ollama服务
你可以选择在宿主机上运行Ollama(若你有GPU),也可以使用云端Ollama或OpenRouter。本教程以本地Ollama为例。
- 为什么:本地模型免费、无网络延迟;云端模型可能更强,但需付费。通过Ollama,我们可以无缝切换。
四、详细操作步骤(如何操作)
下面每一步都会说明"是什么"、"为什么"和"如何操作"。请逐条执行,注意替换示例中的IP地址、密钥等为你的实际信息。
步骤1:如果你在Windows上,先安装WSL(可选)
是什么:WSL让你能在Windows上运行Linux系统,无需虚拟机。
为什么:大多数AI工具和Docker原生支持Linux,在WSL里操作更顺畅。
如何操作:
bash
# 安装Ubuntu 24.04发行版
wsl --install Ubuntu-24.04
# 进入WSL环境
wsl
# 切换到root用户(后续操作需要权限)
sudo su
步骤2:安装Docker(如果没有)
是什么:Docker是容器引擎,我们用它拉取和运行镜像。
为什么:容器内已经打包好所有工具,你只需一行命令就能启动完整环境。
如何操作(以Ubuntu为例):
bash
# 更新软件包索引
apt update
# 安装必要工具
apt install -y curl wget sudo
# 添加Docker官方GPG密钥(使用阿里云镜像加速)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 再次更新并安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 验证安装
docker --version
步骤3:启动Ollama服务(宿主机或外部服务器)
是什么:Ollama是一个大模型服务,提供与OpenAI兼容的API接口。我们需要它来驱动AI编程助手。
为什么:容器内的AI工具会通过Ollama API调用模型。你可以选择在宿主机运行Ollama(利用本地GPU),也可以使用远程Ollama实例。
如何操作(在宿主机执行,假设你已有Ollama二进制):
bash
# 先关闭可能运行的Ollama进程(避免端口冲突)
pkill ollama
# 设置环境变量优化性能
export OLLAMA_NUM_PARALLEL=1 # 并行请求数,设为1可避免OOM
export OLLAMA_FLASH_ATTENTION=1 # 启用FlashAttention加速
export OLLAMA_KEEP_ALIVE=-1 # 模型常驻内存
export OLLAMA_HOST=0.0.0.0:8000 # 监听所有网卡的8000端口
# 后台启动Ollama服务
nohup ollama serve &
# 如果你需要使用云端模型(如minimax),先登录
ollama signin
# 拉取一个云端模型(免费版有速率限制)
ollama pull minimax-m2.5:cloud
# 拉取一个本地模型(这里使用qwen3.5:9b)
ollama pull qwen3.5:9b
注意:如果宿主机没有GPU,Ollama会使用CPU运行,速度较慢。此时可以考虑使用OpenRouter等云端API。
步骤4:测试Ollama服务(可选)
是什么:发送一个简单请求,验证Ollama是否正常工作。
为什么:确保API可用,避免后续AI工具调用失败。
如何操作:
bash
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-local" \
-d '{
"model": "qwen3.5:9b",
"messages": [{"role": "user", "content": "1+2=?"}],
"temperature": 0.2
}' | jq '.'
如果返回包含"3"的JSON,说明服务正常。
步骤5:创建并运行Docker容器
是什么:从Docker Hub拉取预构建镜像,创建容器并进入交互式Shell。
为什么 :镜像swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:claudecode_codex_opencode_openclaw已包含所有工具和依赖,你无需手动安装。
如何操作:
bash
# 停止并删除同名容器(如果之前存在)
docker stop cowxl 2>/dev/null
docker rm cowxl 2>/dev/null
# 运行新容器
docker run -itd --name cowxl --hostname cowxl --privileged \
--net=host \
-v $PWD:/app \
-w /app \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:claudecode_codex_opencode_openclaw /bin/bash
docker start cowxl
docker exec -ti cowxl bash
参数解释:
--name cowxl:容器名。--hostname cowxl:容器内的主机名。--privileged:赋予容器特权,以便启动SSH等系统服务。--net=host:使用宿主机网络,方便容器访问宿主机上的Ollama(若Ollama在宿主机)。-v $PWD:/app:将当前目录挂载到容器的/app,方便交换文件。-w /app:工作目录设为/app。
执行后,你会进入容器的bash提示符。后续操作均在容器内进行。
步骤6:初始化默认配置
是什么 :运行容器内的/opt/reset.sh脚本,它会重置一些工具的默认配置,确保环境干净。
为什么:避免之前使用残留的配置影响当前实验。
如何操作:
bash
/opt/reset.sh
步骤7:切换模型供应商(以使用本地qwen3.5:9b为例)
是什么:运行Python脚本,修改AI工具的配置文件,让它们指向你的Ollama服务。
为什么:Claude Code、Codex等默认使用官方API(如Anthropic、OpenAI),我们需要将它们重定向到自己的Ollama端点。
如何操作:
bash
python /opt/switch_model.py \
--base_url "http://127.0.0.1:8000" \
--model_name "qwen3.5:9b" \
--api_key "test" \
--proxy ""
# 使环境变量生效(脚本会修改.bashrc)
source ~/.bashrc
参数解释:
--base_url:Ollama API地址(容器内访问宿主机用127.0.0.1)。--model_name:模型名称。--api_key:Ollama不需要真实key,填任意值。--proxy:无需代理
脚本会修改/root/.claude-mem/settings.json、/root/.codex/config.toml等文件,将API基础URL指向你的Ollama。
步骤8:集成飞书机器人(OpenClaw,可选)
是什么:OpenClaw是一个AI网关,可以将飞书群聊中的消息转发给模型,并返回应答。
为什么:如果你想在团队协作中测试AI能力,或者用飞书作为交互界面,这个配置很有用。
如何操作:
8.1 设置模型及飞书App ID/Secret
bash
# 配置飞书应用凭证(需提前在飞书开放平台创建应用)
openclaw config set channels.feishu.appId "<你的appId>"
openclaw config set channels.feishu.appSecret "<你的appSecret>"
# 设置网关端口和鉴权token,后面http登陆需要传入这个token
openclaw config set gateway.port 8989
openclaw config set gateway.auth.token "5903a6b692241a37fd0d17b0b08f639b9214e9de1793decd"
# 配置模型(Ollama)
openclaw config set models.providers.ollama.models[0].name "qwen3.5:9b"
openclaw config set models.providers.ollama.models[0].id "qwen3.5:9b"
openclaw config set models.providers.ollama.apiKey "xxx"
# 设置默认使用的模型
openclaw config set agents.defaults.model.primary "ollama/qwen3.5:9b"
8.2 启动网关
bash
nohup openclaw gateway > /app/openclaw.log 2>&1 &
8.3 浏览器访问管理界面
打开 http://你的服务器IP:8989/#token=5903a6b692241a37fd0d17b0b08f639b9214e9de1793decd 即可查看状态。
步骤9:配置Web SSH(easynode,可选)
是什么:easynode是一个基于Web的SSH客户端,让你在浏览器里就能操作容器终端,无需安装额外软件。
为什么:方便从任何设备(包括手机)登录容器,尤其当容器部署在云端时。
如何操作:
9.1 设置SSH密码并启动SSH服务
bash
# 设置root密码(Hello123仅作示例,建议修改)
export passwd=Hello123 && printf "${passwd}\n${passwd}\n" | passwd root
# 启动SSH服务(脚本会启动sshd)
nohup sudo /usr/bin/run.sh &
9.2 启动easynode
bash
export ENABLE_HTTPS=1 # 启用HTTPS
export HOST=0.0.0.0 # 监听所有IP
cd /easynode
rm /easynode/app/db -rf
nohup npm start > /easynode/log.txt 2>&1 &
9.3 获取自动生成的登录凭据
bash
cat /easynode/log.txt | egrep "用户名|密码"
示例输出:
2026-03-11 15:48:11.089 [INFO] - 用户名: xSaHiazw
2026-03-11 15:48:11.089 [INFO] - 密码: FA7EsYQx
9.4 浏览器访问
打开 https://你的服务器IP:8092/,输入上面的用户名和密码,即可获得Web终端。
步骤10:使用三款AI编程工具
现在环境已就绪,你可以开始体验了!
10.1 Claude Code
bash
claude
首次运行会提示登录,按指引操作(若已配置模型切换,会直接使用你的Ollama)。之后即可在终端中与Claude对话,让它帮你写代码、解释代码等。
10.2 Codex(OpenAI Codex)
bash
codex --dangerously-bypass-approvals-and-sandbox
注意:--dangerously-bypass-approvals-and-sandbox 参数会绕过安全确认,适合实验环境。
10.3 OpenCode
bash
opencode
OpenCode是一个开源实现,界面类似。输入/model可以切换模型。
步骤11:其他有用命令
11.1 更新工具到最新版本
bash
npm update -g @openai/codex
npm update -g @anthropic/claude-code
curl -fsSL https://opencode.ai/install | bash
11.2 切换不同模型/供应商的示例
switch_model.py支持多种场景:
bash
# 切换到qwen3.5:27b
python /opt/switch_model.py --base_url "http://127.0.0.1:8000" \
--model_name "qwen3.5:27b" --api_key "test" --proxy ""
source ~/.bashrc
# 切换到Ollama上的另一个云端模型
python /opt/switch_model.py --base_url "http://127.0.0.1:8000" \
--model_name "glm-5:cloud" --api_key "test" --proxy ""
source ~/.bashrc
# 切换到OpenRouter(聚合多家模型API)
python /opt/switch_model.py --base_url "https://openrouter.ai/api" \
--model_name "minimax/minimax-m2.5" \
--api_key "<你的api_key>" \
--proxy ""
# 如果OpenRouter需要代理(如访问Claude模型)
python /opt/switch_model.py --base_url "https://openrouter.ai/api" \
--model_name "anthropic/claude-sonnet-4.6" \
--api_key "你的OpenRouter密钥" \
--proxy "http://<你的代理服务器>:端口"
11.3 针对OpenCode的特殊说明
OpenCode默认使用Anthropic API,如果你通过OpenRouter使用Claude模型,需要先登录OpenRouter:
bash
opencode auth login # 选择OpenRouter并输入API Key
opencode
/model # 在对话中切换到OpenRouter下的对应模型
步骤12:进阶------使用MCP(模型上下文协议)
是什么:MCP是一种让AI模型调用外部工具(如股票查询、数据库查询)的协议。通过MCP,你可以赋予AI编程助手实时获取信息的能力。
为什么:比如让Claude帮你查股票行情,它需要调用外部API,MCP就是桥梁。
如何操作(以股票MCP为例):
-
在容器外 (或另一个终端)启动MCP服务:
bashcd /opt git clone https://github.com/xinkuang/china-stock-mcp cd china-stock-mcp pip install -r requirements.txt --break-system-packages uv run -m china_stock_mcp --streamable-http --host 0.0.0.0 --port 8081 -
在容器内配置Claude Code连接该MCP服务:
bash# 添加MCP服务器 claude mcp add --transport http stripe --scope local http://localhost:8081/mcp
之后在Claude Code中提问关于股票的问题,它会自动调用MCP工具获取数据。
五、常见问题与排错
Q:容器内无法访问宿主机的Ollama?
A:检查是否使用了--net=host,并确认宿主机Ollama监听在0.0.0.0:8000(而非127.0.0.1)。在容器内用curl 127.0.0.1:8000测试。
Q:AI工具报错"Invalid API Key"?
A:Ollama不需要真实key,但工具可能要求非空,脚本已填入"test"。如果使用OpenRouter,务必填入有效密钥。
Q:easynode无法访问?
A:确认防火墙开放了8092端口,并且容器内nohup npm start正常运行。查看日志cat /easynode/log.txt。
Q:我想用其他模型(如DeepSeek)?
A:通过switch_model.py指定对应模型的base_url和model_name。如果是Ollama模型,先ollama pull。
六、结语
通过本文,你应该能成功搭建一个集成了Claude Code、Codex、OpenCode的Docker环境,并自由切换不同模型。这个环境不仅是对比测试的利器,也是学习AI编程助手、探索MCP的绝佳平台。希望你能用这个环境发现更多有趣的用法,也欢迎分享你的测试结果和心得!
如果你在搭建过程中遇到问题,或有改进建议,欢迎在评论区留言交流。祝你玩得开心!
资源链接
- 股票MCP仓库:https://github.com/xinkuang/china-stock-mcp
- 社区Skill分享:https://awesomeclaude.ai/