Update Dockerfile
Browse files- 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 |
-
#
|
10 |
-
#
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
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 |
-
#
|
24 |
-
#
|
25 |
-
RUN chown -R deno:deno /app
|
26 |
|
27 |
-
#
|
28 |
-
#
|
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"]
|