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"]