huanbao commited on
Commit
27f1af2
·
verified ·
1 Parent(s): 0abe1c8

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +105 -69
Dockerfile CHANGED
@@ -3,6 +3,11 @@ FROM node:22-bookworm-slim
3
  ENV PIP_BREAK_SYSTEM_PACKAGES=1
4
 
5
  # 1. 安装基础依赖
 
 
 
 
 
6
  RUN apt-get update && apt-get install -y --no-install-recommends \
7
  python3 \
8
  python3-pip \
@@ -16,64 +21,35 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
16
  unzip \
17
  && rm -rf /var/lib/apt/lists/*
18
 
19
- # 2. 安装核心 CLI 工具
20
  RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
21
  && npm cache clean --force
22
 
23
- # 2. 包装 claude 可执行文件,启动时无条件注入沙箱变量
24
- RUN CLAUDE_BIN=$(which claude) && \
25
- mv "$CLAUDE_BIN" "${CLAUDE_BIN}.real" && \
26
- printf '#!/bin/sh\nexport IS_SANDBOX=1\nexport CLAUDE_CODE_BUBBLEWRAP=1\nexec "%s.real" "$@"\n' "$CLAUDE_BIN" > "$CLAUDE_BIN" && \
27
- chmod +x "$CLAUDE_BIN"
28
-
29
- # 确保给 node 用户写入正确的 bypass 权限
30
- RUN mkdir -p /home/node/.claude && \
31
- echo '{"permissions":{"defaultMode":"bypassPermissions"},"skipDangerousModePermissionPrompt":true}' > /home/node/.claude/settings.json && \
32
- echo '{"hasCompletedOnboarding":true,"skipDangerousModePermissionPrompt":true}' > /home/node/.claude.json && \
33
- chown -R node:node /home/node/.claude /home/node/.claude.json
34
-
35
- # 同时确保全局变量
36
- ENV IS_SANDBOX=1
37
- ENV CLAUDE_CODE_BUBBLEWRAP=1
38
- ENV CLAUDE_CODE_DISABLE_TELEMETRY=1
39
- ENV DO_NOT_TRACK=1
40
-
41
- # 3. 安装官方 Cursor CLI,并使用【软链接】暴露到全局 PATH(保持 index.js 相对路径不破坏)
42
- RUN curl -fsSL https://cursor.com/install | bash && \
43
- chmod -R 755 /root/.local && \
44
- if [ -f /root/.local/bin/agent ]; then \
45
- ln -sf /root/.local/bin/agent /usr/local/bin/agent && \
46
- ln -sf /root/.local/bin/agent /usr/local/bin/cursor-agent && \
47
- ln -sf /root/.local/bin/agent /usr/local/bin/cursor; \
48
- fi
49
-
50
- # 4. 设置环境变量
51
- ENV PATH="/root/.local/bin:/home/node/.local/bin:${PATH}"
52
- ENV HOME=/home/node
53
- ENV HOST=0.0.0.0
54
- ENV PORT=7860
55
- ENV SERVER_PORT=7860
56
-
57
- # ==================== 【新增:Claude Code 超时放宽】 ====================
58
- # API 请求总超时(设为 20 分钟 = 1200000ms)
59
- ENV API_TIMEOUT_MS=1200000
60
- # 禁用/放宽 5分钟(300s) 首字与空闲看门狗(这是导致 5 分钟自动重试的核心原因)
61
- ENV CLAUDE_STREAM_IDLE_TIMEOUT_MS=1200000
62
- ENV CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS=1200000
63
- ENV CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS=1200000
64
- # Bash 命令执行默认超时(避免执行长任务被 2 分钟打断)
65
- ENV BASH_DEFAULT_TIMEOUT_MS=1800000
66
- ENV BASH_MAX_TIMEOUT_MS=7200000
67
- # =====================================================================
68
-
69
- # 5. 创建挂载点与配置目录,并将所有权赋予 UID 1000 (node 用户)
70
- RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster /home/node/.cursor && \
71
  chown -R 1000:1000 /data /home/node
72
 
73
- # 6. 复制入口脚本并设置权限
74
  COPY entrypoint.sh /entrypoint.sh
75
  RUN chmod +x /entrypoint.sh
76
 
 
 
 
 
 
77
  WORKDIR /data/app
78
  EXPOSE 7860
79
 
@@ -91,40 +67,100 @@ CMD ["cloudcli"]
91
 
92
 
93
 
94
- # FROM node:22-bullseye-slim
95
 
96
- # # 安装 git, curl, bash 等开发工具
97
- # RUN apt-get update && apt-get install -y \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  # git \
99
  # curl \
100
  # ca-certificates \
101
  # ripgrep \
102
  # procps \
 
 
 
103
  # && rm -rf /var/lib/apt/lists/*
104
 
105
- # # 全局安装 Claude Code CLI 和 CloudCLI
106
- # RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli
107
-
108
- # # 创建挂载点 /data 以及家目录,并将所有权赋予 UID 1000
109
- # RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.cloudcli && \
110
- # chown -R 1000:1000 /data /home/node
111
-
112
- # # 复制入口脚本并设置权限
113
- # COPY --chown=1000:1000 entrypoint.sh /entrypoint.sh
114
- # RUN chmod +x /entrypoint.sh
115
-
116
- # # 切换为 1000 用户 (node 用户)
117
- # USER 1000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  # ENV HOME=/home/node
119
- # # 通过环境变量配置网络监听,避免命令行传参报错
120
  # ENV HOST=0.0.0.0
121
  # ENV PORT=7860
122
  # ENV SERVER_PORT=7860
123
 
124
- # WORKDIR /data/app
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
 
126
  # EXPOSE 7860
127
 
128
  # ENTRYPOINT ["/entrypoint.sh"]
129
- # # 修正 CMD,直接调用 cloudcli(它会自动识别上面的 HOST 和 PORT 环境变量)
130
  # CMD ["cloudcli"]
 
3
  ENV PIP_BREAK_SYSTEM_PACKAGES=1
4
 
5
  # 1. 安装基础依赖
6
+ # 修复说明(依据 readme.md 实测结论):
7
+ # - 不安装 bubblewrap,也不再注入 bwrap 假 shim:hfspace seccomp 拦截 CLONE_NEWUSER 且容器内无 bwrap,
8
+ # 任何沙箱路径必然失败;实测有效解法是 Codex 配置顶层 sandbox_mode="danger-full-access" +
9
+ # approval_policy="never"(由 entrypoint.sh 每次启动生成),Codex 从此完全跳过沙箱路径,
10
+ # 假 shim 属冗余方案且存在误执行风险,已移除
11
  RUN apt-get update && apt-get install -y --no-install-recommends \
12
  python3 \
13
  python3-pip \
 
21
  unzip \
22
  && rm -rf /var/lib/apt/lists/*
23
 
24
+ # 2. 安装核心 CLI 工具并清理 npm 缓存
25
  RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
26
  && npm cache clean --force
27
 
28
+ # 3. 创建 codex wrapper(readme 实测方案第 3 条):
29
+ # 真实二进制为 task-master-ai 内置依赖;当未显式提供 OPENAI_API_KEY 时
30
+ # 自动从 /data/.codex/gw_token 加载网关凭证注入环境,集成端无环境变量也能正常鉴权
31
+ RUN cat << 'EOF' > /usr/local/bin/codex
32
+ #!/bin/bash
33
+ if [ -z "$OPENAI_API_KEY" ] && [ -r /data/.codex/gw_token ]; then
34
+ export OPENAI_API_KEY="$(cat /data/.codex/gw_token)"
35
+ fi
36
+ exec /usr/local/lib/node_modules/task-master-ai/node_modules/.bin/codex "$@"
37
+ EOF
38
+ RUN chmod +x /usr/local/bin/codex
39
+
40
+ # 4. 创建挂载点与配置目录
41
+ RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster && \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  chown -R 1000:1000 /data /home/node
43
 
44
+ # 5. 复制入口脚本并设置权限
45
  COPY entrypoint.sh /entrypoint.sh
46
  RUN chmod +x /entrypoint.sh
47
 
48
+ ENV HOME=/home/node
49
+ ENV HOST=0.0.0.0
50
+ ENV PORT=7860
51
+ ENV SERVER_PORT=7860
52
+
53
  WORKDIR /data/app
54
  EXPOSE 7860
55
 
 
67
 
68
 
69
 
 
70
 
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+ # claudecode、cursor可用版本
86
+ # FROM node:22-bookworm-slim
87
+
88
+ # ENV PIP_BREAK_SYSTEM_PACKAGES=1
89
+
90
+ # # 1. 安装基础依赖
91
+ # RUN apt-get update && apt-get install -y --no-install-recommends \
92
+ # python3 \
93
+ # python3-pip \
94
  # git \
95
  # curl \
96
  # ca-certificates \
97
  # ripgrep \
98
  # procps \
99
+ # tree \
100
+ # jq \
101
+ # unzip \
102
  # && rm -rf /var/lib/apt/lists/*
103
 
104
+ # # 2. 安装核心 CLI 工具
105
+ # RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
106
+ # && npm cache clean --force
107
+
108
+ # # 2. 包装 claude 可执行文件,启动时无条件注入沙箱变量
109
+ # RUN CLAUDE_BIN=$(which claude) && \
110
+ # mv "$CLAUDE_BIN" "${CLAUDE_BIN}.real" && \
111
+ # printf '#!/bin/sh\nexport IS_SANDBOX=1\nexport CLAUDE_CODE_BUBBLEWRAP=1\nexec "%s.real" "$@"\n' "$CLAUDE_BIN" > "$CLAUDE_BIN" && \
112
+ # chmod +x "$CLAUDE_BIN"
113
+
114
+ # # 确保给 node 用户写入正确的 bypass 权限
115
+ # RUN mkdir -p /home/node/.claude && \
116
+ # echo '{"permissions":{"defaultMode":"bypassPermissions"},"skipDangerousModePermissionPrompt":true}' > /home/node/.claude/settings.json && \
117
+ # echo '{"hasCompletedOnboarding":true,"skipDangerousModePermissionPrompt":true}' > /home/node/.claude.json && \
118
+ # chown -R node:node /home/node/.claude /home/node/.claude.json
119
+
120
+ # # 同时确保全局变量
121
+ # ENV IS_SANDBOX=1
122
+ # ENV CLAUDE_CODE_BUBBLEWRAP=1
123
+ # ENV CLAUDE_CODE_DISABLE_TELEMETRY=1
124
+ # ENV DO_NOT_TRACK=1
125
+
126
+ # # 3. 安装官方 Cursor CLI,并使用【软链接】暴露到全局 PATH(保持 index.js 相对路径不破坏)
127
+ # RUN curl -fsSL https://cursor.com/install | bash && \
128
+ # chmod -R 755 /root/.local && \
129
+ # if [ -f /root/.local/bin/agent ]; then \
130
+ # ln -sf /root/.local/bin/agent /usr/local/bin/agent && \
131
+ # ln -sf /root/.local/bin/agent /usr/local/bin/cursor-agent && \
132
+ # ln -sf /root/.local/bin/agent /usr/local/bin/cursor; \
133
+ # fi
134
+
135
+ # # 4. 设置环境变量
136
+ # ENV PATH="/root/.local/bin:/home/node/.local/bin:${PATH}"
137
  # ENV HOME=/home/node
 
138
  # ENV HOST=0.0.0.0
139
  # ENV PORT=7860
140
  # ENV SERVER_PORT=7860
141
 
142
+ # # ==================== 【新增:Claude Code 超时放宽】 ====================
143
+ # # API 请求总超时(设为 20 分钟 = 1200000ms)
144
+ # ENV API_TIMEOUT_MS=1200000
145
+ # # 禁用/放宽 5分钟(300s) 首字与空闲看门狗(这是导致 5 分钟自动重试的核心原因)
146
+ # ENV CLAUDE_STREAM_IDLE_TIMEOUT_MS=1200000
147
+ # ENV CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS=1200000
148
+ # ENV CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS=1200000
149
+ # # Bash 命令执行默认超时(避免执行长任务被 2 分钟打断)
150
+ # ENV BASH_DEFAULT_TIMEOUT_MS=1800000
151
+ # ENV BASH_MAX_TIMEOUT_MS=7200000
152
+ # # =====================================================================
153
+
154
+ # # 5. 创建挂载点与配置目录,并将所有权赋予 UID 1000 (node 用户)
155
+ # RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster /home/node/.cursor && \
156
+ # chown -R 1000:1000 /data /home/node
157
+
158
+ # # 6. 复制入口脚本并设置权限
159
+ # COPY entrypoint.sh /entrypoint.sh
160
+ # RUN chmod +x /entrypoint.sh
161
 
162
+ # WORKDIR /data/app
163
  # EXPOSE 7860
164
 
165
  # ENTRYPOINT ["/entrypoint.sh"]
 
166
  # CMD ["cloudcli"]