fxlinux commited on
Commit
92a2da4
·
verified ·
1 Parent(s): 62189d1

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +17 -15
Dockerfile CHANGED
@@ -6,28 +6,30 @@ WORKDIR /app
6
  ENV DENO_NO_UPDATE_CHECK=1
7
  ENV DENO_NO_PROMPT=1
8
 
9
- # 关键改动1: 提前创建 /deno-dir 并在其上设置权限
10
- # 确保在任何文件被复制或清理之前,Deno 的全局缓存目录及其权限是正确的
11
- RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir
12
-
13
- # 关键改动2: 切换到 'deno' 用户
14
- # 所有后续的命令都将以 'deno' 用户身份执行,确保权限一致性
15
- USER deno
16
-
17
- # 关键改动3: 仅清理 'deno' 用户有权限的目录
18
- # 我们只清理 /app 下的 Deno 相关目录,因为 /deno-dir 已经处理了权限
19
  RUN rm -rf /app/node_modules /app/node_modules/.deno 2>/dev/null || true
20
 
21
  COPY . .
22
 
23
- # 关键改动4: 重新调整 /app 目录权限(因为 COPY 操作可能以 root 权限写入)
24
- # 这确保 'deno' 用户对 /app 下的复制内容有完全控制权
25
- RUN chown -R deno:deno /app
26
 
27
- # 缓存依赖项
28
- # 注意:此时 'deno' 用户对 /app /deno-dir 都应该有权限
29
  RUN deno cache --reload --quiet --node-modules-dir main.ts
30
 
31
  EXPOSE 8000
32
 
 
 
 
 
 
33
  CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"]
 
6
  ENV DENO_NO_UPDATE_CHECK=1
7
  ENV DENO_NO_PROMPT=1
8
 
9
+ # 清理 /deno-dir 并在其上设置权限
10
+ # 理论上,即使是 root 也会遇到权限问题,但我们还是尝试一下
11
+ # 如果这一行再次报错,我们可以考虑移除它,直接让 root 用户写入默认的 /deno-dir
12
+ # 但 Deno 可能会抱怨 /deno-dir 的所有者不是当前用户,所以最好还是尝试 chown
13
+ RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir || true # 添加 || true 忽略错误,确保流程继续
14
+
15
+ # 清理 /app 目录下的 Deno 相关目录
16
+ # 因为我们不 chown /app 了,所以这些 rm 命令可能仍然以 root 运行
 
 
17
  RUN rm -rf /app/node_modules /app/node_modules/.deno 2>/dev/null || true
18
 
19
  COPY . .
20
 
21
+ # 注意:我们不再尝试 chown /app,因为这会导致权限错误。
22
+ # 这意味着 /app 下的文件(包括 main.ts)将由 root 用户拥有。
 
23
 
24
+ # 关键步骤:以 root 用户执行 deno cache 命令
25
+ # 这样它就有权限在 /app/node_modules/.deno /deno-dir 中写入
26
  RUN deno cache --reload --quiet --node-modules-dir main.ts
27
 
28
  EXPOSE 8000
29
 
30
+ # 运行时,仍推荐以非 root 用户运行 Deno 应用,增加安全性
31
+ # 但如果运行时也遇到权限问题,可能需要考虑将 CMD 也保持为 root 用户运行。
32
+ # 考虑到你的应用可能需要写入日志或临时文件,以 root 运行 CMD 可能是最后的手段。
33
+ # 先尝试保持 USER deno 来运行 CMD。
34
+ USER deno
35
  CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"]