Update Dockerfile
Browse files- 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 |
-
#
|
|
|
13 |
RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir
|
14 |
|
15 |
-
#
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
COPY . .
|
19 |
|
20 |
-
#
|
|
|
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 |
-
#
|
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"]
|