Files
2026-08-14 23:41:57 +08:00

76 lines
3.4 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Claude Code 协作镜像(单 agent 版,与 blackboard 协议适配)
#
# 构建(在仓库根目录执行,构建上下文为 claude code/ 目录):
# cd /mnt/e/Code/Go/awesomeProject/agent
# DOCKER_BUILDKIT=0 docker build -f "claude code/Dockerfile" -t claude-coop "claude code/"
#
# 基础镜像用 node:22-alpine(自带 node 22 + npm,满足 Claude Code 的 Node 要求)。
# 在其上装系统工具(curl/wget/git/jq/openssl/ripgrep)和 python3 + 常用库,
# 再全局安装 @anthropic-ai/claude-code 和 MCP SDK,最后放入协作组件
#blackboard MCP server / supervisor / prompts)。
#
# 与 pi-coop 的差异:
# - 用 claude-code 替代 pi-coding-agent
# - blackboard 工具从 pi extension 改为独立 MCP serverstdio 协议)
# - 模型配置走 ANTHROPIC_* 环境变量(不是 pi provider 体系)
FROM node:22-alpine
# ---- 系统工具 + Python ----
# 先把 apk 源换成清华镜像并用 httpnode:22-alpine 的 Alpine 3.24 用官方 CDN
# 拉 APKINDEX 会报 TLS: unspecified error,改 http 绕过;装上 ca-certificates 后
# TLS 即恢复正常)。之后 apk add 装系统工具 + python3。
RUN sed -i 's|https://dl-cdn.alpinelinux.org|http://mirrors.tuna.tsinghua.edu.cn|g' /etc/apk/repositories \
&& apk add --no-cache \
bash ca-certificates git ripgrep \
curl wget jq openssl file \
python3 py3-pip
# ---- Python 常用库 ----
# 用清华 PyPI 镜像加速;--no-cache-dir 避免膨胀;--break-system-packages 放行 Alpine pip 全局安装。
RUN pip3 install --no-cache-dir --break-system-packages \
-i https://pypi.tuna.tsinghua.edu.cn/simple \
requests urllib3 certifi idna charset-normalizer \
cryptography pyOpenSSL paramiko pyjwt \
PyYAML beautifulsoup4 lxml \
python-dotenv click tqdm \
numpy pandas \
httpx aiohttp websockets dnspython \
psutil pillow
# ---- 全局安装 Claude Code ----
# 使用 npmmirror 镜像加速国内下载。
# @anthropic-ai/claude-code:提供 claude CLIheadless 模式入口)
RUN npm install -g \
--registry=https://registry.npmmirror.com \
@anthropic-ai/claude-code@latest
# ---- 协作组件 ----
# blackboard MCP server 放 /mcpsupervisor 与 prompts 放默认路径。
RUN mkdir -p /mcp /prompts /blackboard
COPY blackboard-server.mjs /mcp/blackboard-server.mjs
COPY mcp-servers.json /mcp-servers.json
COPY supervisor.sh /usr/local/bin/supervisor.sh
COPY AGENTS.md /prompts/AGENTS.md
COPY prompts /prompts
RUN chmod +x /usr/local/bin/supervisor.sh
# ---- MCP SDK 本地安装 ----
# ESM 模块解析要求依赖在脚本所在目录的 node_modules 内(全局安装的包不会被
# ESM import 解析到,NODE_PATH 也只对 CommonJS require 生效)。因此在 /mcp
# 目录本地安装 @modelcontextprotocol/sdk,让 blackboard-server.mjs 能 import 到。
RUN cd /mcp && npm init -y >/dev/null 2>&1 \
&& npm install \
--registry=https://registry.npmmirror.com \
@modelcontextprotocol/sdk@latest
# ---- 非 root 用户 ----
# node:22-alpine 自带 node 用户(uid 1000),直接复用,与 pi-coop 的 uid 1000 对齐,
# 便于 blackboard 挂载卷权限一致。
# 注意:--dangerously-skip-permissions 不能以 root 运行,必须用非 root 用户。
RUN chown -R node:node /mcp /prompts /blackboard /mcp-servers.json
USER node
WORKDIR /blackboard
ENTRYPOINT ["/usr/local/bin/supervisor.sh"]