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"]