File size: 4,734 Bytes
38be7e9 c02aa56 38be7e9 cb95286 e1094c6 2e2538e f9e0e2e 38be7e9 e1094c6 f9e0e2e 27f1af2 e1094c6 38be7e9 27f1af2 c02aa56 f9e0e2e 27f1af2 c02aa56 fa39e20 27f1af2 c98a8f2 d3fdbea c02aa56 fa39e20 2e2538e 27f1af2 2e2538e 27f1af2 2e2538e 27f1af2 2e2538e 27f1af2 2e2538e 27f1af2 2e2538e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | 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"] |