File size: 1,474 Bytes
f373e34
 
 
e8cc2e9
 
4b8300f
 
5feccdc
6cd1bef
 
 
92a2da4
6cd1bef
 
 
 
e8cc2e9
6cd1bef
d43afb0
 
6cd1bef
 
e8cc2e9
6cd1bef
 
e8cc2e9
f373e34
 
 
6cd1bef
 
 
92a2da4
f373e34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FROM denoland/deno:latest

WORKDIR /app

# 设置环境变量,阻止 Deno 更新检查和交互式提示
ENV DENO_NO_UPDATE_CHECK=1
ENV DENO_NO_PROMPT=1

# 关键改动1: 提前创建 /deno-dir 并尝试设置权限。
# 即使 chown 失败 (|| true 忽略错误),也能确保目录存在,并让 root 用户能写入。
RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir || true

# 关键改动2: 极其彻底地清理 WORKDIR,确保没有残留。
# 这会删除 /app 目录下的所有内容,提供一个完全干净的环境。
# 请注意,这会删除所有文件,包括隐藏文件和目录。
RUN rm -rf /app/* /app/.* 2>/dev/null || true

# 复制你的应用文件到 /app 目录。
COPY . .

# 注意:我们不再尝试 chown /app 整个目录,因为这在 Hugging Face Spaces 上会导致权限错误。
# 这意味着 /app 下的应用程序文件(如 main.ts)将由 root 用户拥有。

# 关键步骤:以 root 用户执行 deno cache 命令。
# 这样它就有权限在 /app/node_modules/.deno 或 /deno-dir 中写入所需的依赖。
RUN deno cache --reload --quiet --node-modules-dir main.ts

EXPOSE 8000

# 运行时,将用户切换回 'deno'。
# 这增加了运行时的安全性,因为应用程序将以非 root 权限运行。
# 如果你的应用在运行时需要写入由 root 拥有的文件,可能需要移除此行。
USER deno 
CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"]