在 docker 中缓存 npm 包

问题描述 投票:0回答:1

嘿,我是 docker 和 node 的新手。我试图对一个简单的节点 api 进行 dockerize 。 这是我的 docker 文件:

WORKDIR app
EXPOSE 3000
ENV NODE_ENV=production
COPY package.json package-lock.json ./
RUN \
    --mount=type=cache,target=~/.npm\
    npm ci --only-production
USER node
COPY --chown=node:node /src .
CMD [ "npm" , "run" , "dev"]

据我所知,当我尝试添加缓存挂载时,我的疑虑和问题出现了 我需要找到 npm 缓存其包的位置,以便我可以将缓存安装到该位置,以便 npm 能够找到它们,这样就不会重新下载它们。起初用户是 root,所以我将缓存挂载到 /root/.npm (~这里将是 root home),但是当我切换到节点用户并运行 npm run 时,它会不会无法找到缓存的依赖项,因为 home 已更改(它将变为 /home/node)。

每当我出于安全目的切换用户时,我真的对这类事情感到困惑,因此任何澄清将不胜感激。

node.js docker npm caching mount
1个回答
0
投票

RUN --mount
选项仅适用于其所在的特定
RUN
命令。 一旦
RUN
命令完成,安装就会被移除。

这意味着当您运行命令时,您只需要为任何正确的目录上下文提供正确的安装路径。 如果运行该命令时主目录是

/root
,则硬编码是正确的

RUN --mount=type=cache,target=/root/.npm \
    npm ci --only-production

当您运行应用程序时,它将使用本地

node_modules
目录,并且根本不会查看此缓存目录。

node_modules
由root拥有是正确的,文件通常是世界可读的,但不是世界可写的。我可能会类似地删除
COPY --chown
选项以将相同的权限应用于您的源代码,防止它被获取不小心被覆盖了。)

© www.soinside.com 2019 - 2024. All rights reserved.