目录
Docker 和私有模块
目录
要在 Docker 容器中安装私有 npm 包,您需要使用 Docker 构建密钥。
背景:运行时变量
您不能只使用运行时变量在 Docker 容器中安装私有 npm 包。请考虑以下 Dockerfile
FROM nodeCOPY package.json package.jsonRUN npm install# Add your source filesCOPY . .CMD npm start
它将使用官方 Node.js 镜像,将 package.json
复制到我们的容器中,安装依赖项,复制源文件并运行 package.json
中指定的启动命令。
为了安装私有包,您可能会认为我们可以在运行 npm install
之前添加一行,使用 ENV 参数
ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000
但是,这不会按预期工作,因为您希望在运行 docker build
时执行 npm install,在这种情况下,ENV
变量不会被使用,它们仅在运行时设置。
您必须使用 Docker 构建密钥而不是运行时变量。
更新 Dockerfile
利用此功能的 Dockerfile 比前面的示例多几行,它允许我们使用您的全局 .npmrc
和在运行 npm login
命令时创建的访问令牌(如果您还没有运行它,请在继续之前运行)。
# https://docs.npmjs.net.cn/docker-and-private-modulesFROM node:18ENV APP_HOME="/app"WORKDIR ${APP_HOME}COPY package*.json ${APP_HOME}/RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm installCOPY . ${APP_HOME}/CMD npm start
这将配置您的 Dockerfile,以便通过构建密钥接收 .npmrc
文件,该文件将在 npm 依赖项安装完成后不再留下任何痕迹。
构建 Docker 镜像
要使用上述 Dockerfile 和 npm 身份验证令牌构建镜像,您可以运行以下命令。请注意末尾的 .
,它会将当前目录作为参数传递给 docker build
。
docker build . -t secure-app-secrets:1.0 --secret id=npmrc,src=$HOME/.npmrc
这将构建 Docker 镜像,其中访问令牌来自您的全局 .npmrc
文件,该文件通过构建密钥接收,因此您可以在容器中以当前登录用户的身份运行 npm install
。
注意:您可能需要指定一个与默认的 /
不同的工作目录,否则一些框架(如 Angular)将失败。