code / Dockerfile
huanbao's picture
Update Dockerfile
c98a8f2 verified
Raw History Blame Contribute Delete
4.73 kB
FROM node:22-bookworm-slim
ENV PIP_BREAK_SYSTEM_PACKAGES=1
# 1. 安装基础依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
git \
curl \
ca-certificates \
ripgrep \
procps \
tree \
jq \
unzip \
&& rm -rf /var/lib/apt/lists/*
# 2. 安装核心 CLI 工具并清理 npm 缓存
RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
&& npm cache clean --force
# 3. 创建 codex wrapper(readme 实测方案第 3 条):
# 真实二进制为 task-master-ai 内置依赖;当未显式提供 OPENAI_API_KEY 时
# 自动从 /data/.codex/gw_token 加载网关凭证注入环境,集成端无环境变量也能正常鉴权
RUN cat << 'EOF' > /usr/local/bin/codex
#!/bin/bash
if [ -z "$OPENAI_API_KEY" ] && [ -r /data/.codex/gw_token ]; then
export OPENAI_API_KEY="$(cat /data/.codex/gw_token)"
fi
exec /usr/local/lib/node_modules/task-master-ai/node_modules/.bin/codex "$@"
EOF
RUN chmod +x /usr/local/bin/codex
# 4. 创建挂载点与配置目录
RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster && \
chown -R 1000:1000 /data /home/node
# 5. 复制入口脚本并设置权限
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV HOME=/home/node
ENV HOST=0.0.0.0
ENV PORT=7860
ENV SERVER_PORT=7860
WORKDIR /home/node/app
EXPOSE 7860
ENTRYPOINT ["/entrypoint.sh"]
CMD ["cloudcli"]
# claudecode、cursor可用版本
# FROM node:22-bookworm-slim
# ENV PIP_BREAK_SYSTEM_PACKAGES=1
# # 1. 安装基础依赖
# RUN apt-get update && apt-get install -y --no-install-recommends \
# python3 \
# python3-pip \
# git \
# curl \
# ca-certificates \
# ripgrep \
# procps \
# tree \
# jq \
# unzip \
# && rm -rf /var/lib/apt/lists/*
# # 2. 安装核心 CLI 工具
# RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
# && npm cache clean --force
# # 2. 包装 claude 可执行文件,启动时无条件注入沙箱变量
# RUN CLAUDE_BIN=$(which claude) && \
# mv "$CLAUDE_BIN" "${CLAUDE_BIN}.real" && \
# printf '#!/bin/sh\nexport IS_SANDBOX=1\nexport CLAUDE_CODE_BUBBLEWRAP=1\nexec "%s.real" "$@"\n' "$CLAUDE_BIN" > "$CLAUDE_BIN" && \
# chmod +x "$CLAUDE_BIN"
# # 确保给 node 用户写入正确的 bypass 权限
# RUN mkdir -p /home/node/.claude && \
# echo '{"permissions":{"defaultMode":"bypassPermissions"},"skipDangerousModePermissionPrompt":true}' > /home/node/.claude/settings.json && \
# echo '{"hasCompletedOnboarding":true,"skipDangerousModePermissionPrompt":true}' > /home/node/.claude.json && \
# chown -R node:node /home/node/.claude /home/node/.claude.json
# # 同时确保全局变量
# ENV IS_SANDBOX=1
# ENV CLAUDE_CODE_BUBBLEWRAP=1
# ENV CLAUDE_CODE_DISABLE_TELEMETRY=1
# ENV DO_NOT_TRACK=1
# # 3. 安装官方 Cursor CLI,并使用【软链接】暴露到全局 PATH(保持 index.js 相对路径不破坏)
# RUN curl -fsSL https://cursor.com/install | bash && \
# chmod -R 755 /root/.local && \
# if [ -f /root/.local/bin/agent ]; then \
# ln -sf /root/.local/bin/agent /usr/local/bin/agent && \
# ln -sf /root/.local/bin/agent /usr/local/bin/cursor-agent && \
# ln -sf /root/.local/bin/agent /usr/local/bin/cursor; \
# fi
# # 4. 设置环境变量
# ENV PATH="/root/.local/bin:/home/node/.local/bin:${PATH}"
# ENV HOME=/home/node
# ENV HOST=0.0.0.0
# ENV PORT=7860
# ENV SERVER_PORT=7860
# # ==================== 【新增:Claude Code 超时放宽】 ====================
# # API 请求总超时(设为 20 分钟 = 1200000ms)
# ENV API_TIMEOUT_MS=1200000
# # 禁用/放宽 5分钟(300s) 首字与空闲看门狗(这是导致 5 分钟自动重试的核心原因)
# ENV CLAUDE_STREAM_IDLE_TIMEOUT_MS=1200000
# ENV CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS=1200000
# ENV CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS=1200000
# # Bash 命令执行默认超时(避免执行长任务被 2 分钟打断)
# ENV BASH_DEFAULT_TIMEOUT_MS=1800000
# ENV BASH_MAX_TIMEOUT_MS=7200000
# # =====================================================================
# # 5. 创建挂载点与配置目录,并将所有权赋予 UID 1000 (node 用户)
# RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster /home/node/.cursor && \
# chown -R 1000:1000 /data /home/node
# # 6. 复制入口脚本并设置权限
# COPY entrypoint.sh /entrypoint.sh
# RUN chmod +x /entrypoint.sh
# WORKDIR /data/app
# EXPOSE 7860
# ENTRYPOINT ["/entrypoint.sh"]
# CMD ["cloudcli"]