fxlinux commited on
Commit
62189d1
·
verified ·
1 Parent(s): 5feccdc

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +12 -15
Dockerfile CHANGED
@@ -5,32 +5,29 @@ WORKDIR /app
5
  # 设置环境变量,阻止 Deno 更新检查和交互式提示
6
  ENV DENO_NO_UPDATE_CHECK=1
7
  ENV DENO_NO_PROMPT=1
8
- # 明确设置 Deno 的根目录,可能有助于控制缓存位置
9
- # 如果不设置,默认为 /deno-dir
10
- # ENV DENO_DIR=/deno-dir # 这行通常不需要,因为 Deno 知道这个默认路径
11
 
12
- # 提前创建并确保 /deno-dir 目录存在,并赋予 deno 用户权限
 
13
  RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir
14
 
15
- # 在复制文件之前就进行清理,确保一个非常干净的环境
16
- RUN rm -rf /app/node_modules /app/node_modules/.deno /deno-dir 2>/dev/null || true
 
 
 
 
 
17
 
18
  COPY . .
19
 
20
- # 关键步骤:更改 /app 目录及其内容的权限,使其属于 'deno' 用户和组
 
21
  RUN chown -R deno:deno /app
22
 
23
- # 再次清理,以防万一(虽然通常前面的清理已足够,这里可省略,但保留也无妨)
24
- RUN rm -rf node_modules /app/node_modules/.deno 2>/dev/null || true
25
-
26
- # 关键步骤:将后续的命令切换到 'deno' 用户执行,确保权限正确
27
- USER deno
28
-
29
  # 缓存依赖项
30
- # 确保所有 Deno 相关的缓存和操作都在 /app 目录下进行
31
  RUN deno cache --reload --quiet --node-modules-dir main.ts
32
 
33
  EXPOSE 8000
34
 
35
- # 运行 Deno 应用
36
  CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"]
 
5
  # 设置环境变量,阻止 Deno 更新检查和交互式提示
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"]