Update Dockerfile
Browse files- Dockerfile +15 -16
Dockerfile
CHANGED
@@ -6,30 +6,29 @@ WORKDIR /app
|
|
6 |
ENV DENO_NO_UPDATE_CHECK=1
|
7 |
ENV DENO_NO_PROMPT=1
|
8 |
|
9 |
-
#
|
10 |
-
#
|
11 |
-
|
12 |
-
# 但 Deno 可能会抱怨 /deno-dir 的所有者不是当前用户,所以最好还是尝试 chown
|
13 |
-
RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir || true # 添加 || true 忽略错误,确保流程继续
|
14 |
|
15 |
-
#
|
16 |
-
#
|
17 |
-
|
|
|
18 |
|
|
|
19 |
COPY . .
|
20 |
|
21 |
-
# 注意:我们不再尝试 chown /app
|
22 |
-
# 这意味着 /app
|
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 |
-
#
|
31 |
-
#
|
32 |
-
#
|
33 |
-
# 先尝试保持 USER deno 来运行 CMD。
|
34 |
USER deno
|
35 |
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 |
+
# 关键改动1: 提前创建 /deno-dir 并尝试设置权限。
|
10 |
+
# 即使 chown 失败 (|| true 忽略错误),也能确保目录存在,并让 root 用户能写入。
|
11 |
+
RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir || true
|
|
|
|
|
12 |
|
13 |
+
# 关键改动2: 极其彻底地清理 WORKDIR,确保没有残留。
|
14 |
+
# 这会删除 /app 目录下的所有内容,提供一个完全干净的环境。
|
15 |
+
# 请注意,这会删除所有文件,包括隐藏文件和目录。
|
16 |
+
RUN rm -rf /app/* /app/.* 2>/dev/null || true
|
17 |
|
18 |
+
# 复制你的应用文件到 /app 目录。
|
19 |
COPY . .
|
20 |
|
21 |
+
# 注意:我们不再尝试 chown /app 整个目录,因为这在 Hugging Face Spaces 上会导致权限错误。
|
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 |
+
# 运行时,将用户切换回 'deno'。
|
31 |
+
# 这增加了运行时的安全性,因为应用程序将以非 root 权限运行。
|
32 |
+
# 如果你的应用在运行时需要写入由 root 拥有的文件,可能需要移除此行。
|
|
|
33 |
USER deno
|
34 |
CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"]
|