2026年构建与部署 Claude Code UI Docker 容器完全指南

构建与部署 Claude Code UI Docker 容器完全指南对于许多开发者而言 Anthropic 公司推出的 Claude Code 无疑是 AI 编程领域的得力助手 尽管其代码理解与工具调用能力超强 但价格高昂 网络受限 注册严苛的三座 大山 让不少人望而却步 现在可以使用智谱 ai 大模型 或者 kimi 大模型代替 Claude 模型了 智谱的 api 接口为 https open bigmodel cn api an thropic

大家好,我是讯享网,很高兴认识大家。



对于许多开发者而言,Anthropic公司推出的Claude Code无疑是AI编程领域的得力助手。尽管其代码理解与工具调用能力超强,但价格高昂、网络受限、注册严苛的三座“大山”,让不少人望而却步。

现在可以使用智谱ai大模型,或者kimi大模型代替Claude模型了。

智谱的api接口为:

open.bigmodel.cn/api/an

kimi的api接口为:

api.moonshot.cn/anthrop

原始项目网址:

github.com/siteboon/cla

docker版本网址:

gitee.com/masx200/Claud
docker pull “registry.cn-hangzhou.aliyuncs.com/masx200/claudewebui:1.5.0”

讯享网

构建与部署 Claude Code UI Docker 容器完全指南

> 本文将带你从零开始:

1. 理解 Dockerfile 的每一步在做什么;

2. 在本地准备好持久化目录与空数据库文件;

3. 修改密钥并启动容器;

4. 最终得到一个可远程访问、数据可持久化的 Claude Web UI 服务。

一、镜像构建原理(Dockerfile 拆解)

整个 Dockerfile 采用「三阶段构建」策略:

阶段 作用 关键指令

base 准备操作系统和基础依赖 apk add …yarn install --omit=dev

build 拉源码、装 dev 依赖、构建前端静态文件 yarn installnpm run build

production 拷贝产物、装运行时依赖、降权启动 COPY --from=buildUSER nodejs

1.1 加速国内构建

- 所有 npm / yarn / pip 均切换到清华或 npmmirror 镜像。

- Alpine 软件源替换为 USTC,减少拉取时间。

1.2 产物精简

- 最终镜像只含运行时必须的文件:

- /app/dist/ 前端静态资源

- /app/server/ Node 后端

- /app/data/ 可挂载的数据目录

- 删除 dev 依赖、缓存、构建缓存,镜像体积更小。

1.3 安全加固

- 创建非 root 用户 nodejs:1001

- 只暴露内部端口 3008;

- 通过 HEALTHCHECK 每 30 s 自检一次 /api/auth/status

二、部署前准备(数据目录 & 密钥)

一键生成随机 JWT_SECRET(可选脚本)

在启动前执行一次即可:

bash

# Linux / macOS

讯享网export JWT_SECRET=\((openssl rand -hex 32)</code></pre></div><p class="ztext-empty-paragraph"><br/></p><p data-pid="Fvdt4hzk"># Windows PowerShell</p><div class="highlight"><pre><code class="language-text">\)env:JWT_SECRET = (openssl rand -hex 32)

2.1 选择数据目录

假设你想把数据放在 D:\claude-docker,则将下面所有路径中的

F:/ClaudeWebUI-Docker-main 全部替换成 D:/claude-docker

2.2 创建空数据库文件

Windows PowerShell 执行:

”`powershell

# 创建目录

mkdir D:\claude-docker\database

创建空 SQLite 文件

ni D:\claude-docker\database\auth.db

</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="Y9cwLtWq">Linux / macOS:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TFyA78wt">bash

讯享网mkdir -p /opt/claude-docker/database touch /opt/claude-docker/database/auth.db

</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="CASGCSwV">2.3 准备密钥 </p><p data-pid="xA6__ycx">- OPENAI_API_KEY:你的 OpenAI API Key(以 `sk-` 开头)。 </p><p data-pid="8ktlg8G2">- ANTHROPIC_AUTH_TOKEN:智谱 AI 开放平台申请的 key。 </p><p data-pid="R71dfbL_">申请kimi的apikey网址:</p>Moonshot AI 开放平台 - Kimi 大模型 API 服务<p data-pid="RPrSNz7X">申请智谱 apikey网址:</p>智谱AI开放平台<p data-pid="Wf3fNUfr">把环境变量ANTHROPIC_BASE_URL改为兼容ANTHROPIC的接口地址,以智谱为例“ANTHROPIC_BASE_URL=<span class="invisible">https://</span><span class="visible">open.bigmodel.cn/api/an</span><span class="invisible">thropic</span><span class="ellipsis"></span>&#34;。</p><p data-pid="R6l0UQiz">把这两个值先写到临时文件,稍后在 `docker-compose.yml` 或 `.env` 里引用。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="BgKT24yl">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="_5QpHQzS">三、编写 docker-compose.yml(示例)</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="3MLUndS3">在项目根目录(`D:\claude-docker`)新建 `docker-compose.yml`:</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="zSLykkCO">yaml

version: “3.9”  services:  claudecodeui:  user: “0:0”  command:  - “npm”  - “run”  - “server”  entrypoint:  - “docker-entrypoint.sh” 


image: “registry.cn-hangzhou.aliyuncs.com/masx200/claudewebui:1.5.0” container_name: claude-webui # 关键修改:restart 设为 always restart: always environment: # ———- 必填:换成你自己的 ———- OPENAI_API_KEY: “&lt;sk-你的openai-key&gt;” ANTHROPIC_AUTH_TOKEN: “&lt;glm-你的智谱key&gt;” # ———- 以下保持原样 ———- ANTHROPIC_BASE_URL: “https://open.bigmodel.cn/api/anthropic" NODE_ENV: production PORT: 3008 DB_PATH: /app/data/auth.db HOME: /opt/docker # 随机 32 位 JWT_SECRET JWT_SECRET: \({JWT_SECRET:-}&#34;</span><span class="w"> </span><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="s2">&#34;3008:3008&#34;</span><span class="w"> </span><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="c"># 1) 把本地空数据库文件挂进容器</span><span class="w"> </span><span class="w"> </span>- <span class="s2">&#34;F:/ClaudeWebUI-Docker-main/database/auth.db:/app/server/database/auth.db:rw&#34;</span><span class="w"> </span><span class="w"> </span><span class="c"># 2) 其余持久化目录(可按需修改)</span><span class="w"> </span><span class="w"> </span>- <span class="s2">&#34;F:/ClaudeWebUI-Docker-main/data:/app/data&#34;</span><span class="w"> </span><span class="w"> </span>- <span class="s2">&#34;F:/ClaudeWebUI-Docker-main/workspace:/opt/docker:rw&#34;</span><span class="w"> </span><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="l">claude-net</span><span class="w"> </span><span class="w"> </span><span class="nt">working_dir</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;/app&#34;</span><span class="w"> </span><span class="w"> </span><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">claude-net</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">bridge</span><span class="w"> </span><span class="w"> </span><span class="nt">enable_ipv6</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="w"> </span><span class="nt">ipam</span><span class="p">:</span><span class="w"> </span><span class="w"> </span><span class="nt">config</span><span class="p">:</span><span class="w"> </span><span class="w"> </span>- <span class="nt">subnet</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;172.25.25.0/24&#34;</span><span class="w"> </span><span class="w"> </span>- <span class="nt">subnet</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;fc99:db8:21::/64&#34;</span></code></pre></div><p class="ztext-empty-paragraph"><br/></p><p data-pid="cDz8Eynf">```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="IN6To_2S">&gt; 提示 </p><p data-pid="dqzuEH5y">- Windows 路径用 `/` 或 `\\` 均可。 </p><p data-pid="XdO-8oFV">- `JWT_SECRET` 至少 32 位随机字符串,可执行 `openssl rand -hex 16` 得到。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="iq00DmV5">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="XLJ-v5zu">四、构建 &amp; 启动</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="zFtkqyEQ">1. 构建(首次较慢) </p><p data-pid="lF***jIU">```bash</p><div class="highlight"><pre><code class="language-text"> docker build -f Dockerfile -t claudewebui:1.5.0 .</code></pre></div><p data-pid="z2fvXcQc"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="IR3F3a-t">2. 启动 </p><p data-pid="d3wpfs_1">```bash</p><div class="highlight"><pre><code class="language-text"> docker compose up -d</code></pre></div><p data-pid="l118Hg4q"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="LPkphQfq">3. 查看日志 </p><p data-pid="mdIZNstT">```bash</p><div class="highlight"><pre><code class="language-text"> docker compose logs -f</code></pre></div><p data-pid="vi1N7Xuw"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="C3UT6dgo">4. 浏览器访问 </p><p data-pid="yE6c0ylM">```</p><p data-pid="uMYQWBgF">http://localhost:3008</p><p data-pid="6XzxEnN-"> ```</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="TlIuLrcY"> 首次打开会提示注册管理员账号,完成即可使用。</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="O-V2i206">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="dgmfPh7U">五、日常运维</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="2i35OEH8">操作 命令 </p><p data-pid="lWYx6Gv2">重启服务 `docker compose restart` </p><p data-pid="yl5JJYzP">更新镜像 `docker compose pull &amp;&amp; docker compose up -d --build` </p><p data-pid="I8ffkusT">备份数据库 `docker cp claude-webui:/app/data/auth.db https://zhuanlan.zhihu.com/p/auth-\)(date +%F).db </p><p data-pid="Bm-NDa6r">进入容器 docker exec -it claude-webui sh </p><p class="ztext-empty-paragraph"><br/></p><p data-pid="xYHXYXO5">---</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="lvEWW_1a">六、常见问题速查</p><p class="ztext-empty-paragraph"><br/></p><p data-pid="yaoJlbYC">现象 解决 </p><p data-pid="4Iue2eWD">端口被占用 改ports“3009:3008” </p><p data-pid="EHlG0MaB">找不到 SQLite 文件 确认宿主机路径已挂载且权限 777 / 755 </p><p data-pid="iLGnYB1m">前端空白 检查dist目录是否成功拷贝,npm run build是否报错 </p><p data-pid="nDsiy2lr">日志出现EACCES 把宿主机挂载目录chown -R 1001:1001`

至此,你已经拥有一个可长期运行、数据持久化、密钥自定义的 Claude Web UI Docker 容器。祝编码愉快!


讯享网

小讯
上一篇 2026-03-09 19:58
下一篇 2026-03-09 20:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/209943.html