AI编程助手Claude Code、Codex、OpenCode一站式Docker环境

AI编程助手Claude Code、Codex、OpenCode一站式Docker环境

你是否好奇过不同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为例):

  1. 容器外 (或另一个终端)启动MCP服务:

    bash 复制代码
    cd /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
  2. 在容器内配置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的绝佳平台。希望你能用这个环境发现更多有趣的用法,也欢迎分享你的测试结果和心得!

如果你在搭建过程中遇到问题,或有改进建议,欢迎在评论区留言交流。祝你玩得开心!


资源链接

相关推荐
孟陬2 小时前
另一个角度看 OpenClaw 分析 package.json 依赖看 2026 年包最新趋势
人工智能·ai编程
minstbe2 小时前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(基础版)
前端·人工智能·docker
Keanu-2 小时前
【无标题】
docker·云原生
程序员鱼皮2 小时前
VSCode + Copilot 保姆级 AI 编程实战教程,免费用 Claude,夯爆了!
vscode·ai·程序员·编程·ai编程
Benszen3 小时前
Kubernetes容器编排:从入门到精通
云原生·容器·kubernetes
feidaji3 小时前
ubuntu 20 安装openclaw
人工智能·aigc·ai编程
小虎AI生活4 小时前
OpenClaw 筛掉了 90%的人,这个工具专门来接这 90%
ai编程
火车叼位4 小时前
Docker 全量备份恢复实战:可离线、可迁移、可复原的标准方案
运维·docker