FROM denoland/deno:latest | |
WORKDIR /app | |
# 设置环境变量,阻止 Deno 更新检查和交互式提示 | |
ENV DENO_NO_UPDATE_CHECK=1 | |
ENV DENO_NO_PROMPT=1 | |
# 明确设置 Deno 的根目录,可能有助于控制缓存位置 | |
# 如果不设置,默认为 /deno-dir | |
# ENV DENO_DIR=/deno-dir # 这行通常不需要,因为 Deno 知道这个默认路径 | |
# 提前创建并确保 /deno-dir 目录存在,并赋予 deno 用户权限 | |
RUN mkdir -p /deno-dir && chown -R deno:deno /deno-dir | |
# 在复制文件之前就进行清理,确保一个非常干净的环境 | |
RUN rm -rf /app/node_modules /app/node_modules/.deno /deno-dir 2>/dev/null || true | |
COPY . . | |
# 关键步骤:更改 /app 目录及其内容的权限,使其属于 'deno' 用户和组 | |
RUN chown -R deno:deno /app | |
# 再次清理,以防万一(虽然通常前面的清理已足够,这里可省略,但保留也无妨) | |
RUN rm -rf node_modules /app/node_modules/.deno 2>/dev/null || true | |
# 关键步骤:将后续的命令切换到 'deno' 用户执行,确保权限正确 | |
USER deno | |
# 缓存依赖项 | |
# 确保所有 Deno 相关的缓存和操作都在 /app 目录下进行 | |
RUN deno cache --reload --quiet --node-modules-dir main.ts | |
EXPOSE 8000 | |
# 运行 Deno 应用 | |
CMD ["deno", "run", "--allow-net", "--allow-env", "--node-modules-dir", "main.ts"] |