在线文档教程

Docker 和私有包

Docker 和私有包

如果您已阅读使用私有软件包,您将知道为了使用私有软件包,您需要通过 npm CLI 登录到 npm。

如果您在无法直接登录的环境中使用npm私有软件包(例如在 CI 服务器或 Docker 容器内),则需要获取并导出npm标记作为环境变量。那个标记应该是这样的NPM_TOKEN=00000000-0000-0000-0000-000000000000

在获得身份验证令牌可以帮助你生成令牌。

如果这是您需要的工作流程,请阅读 CI 服务器配置文档。如果这适用于您的系统,那么,完美。

如果没有,这里我们将在npm installDocker容器内运行时查看此工作流的问题。

运行时变量

如果您有以下Dockerfile:

FROM risingstack/alpine:3.3-v4.3.1-3.0.1 COPY package.json package.json RUN npm install # Add your source files COPY . . CMD npm start

哪个将使用RisingStack Alpine Node.JS Docker镜像,将其复制package.json到我们的容器中,安装依赖项,复制源文件并按照中的规定运行启动命令package.json

为了安装私有包,您可能认为我们可以在运行之前npm install使用ENV参数添加一行:

ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000

但是,这不会像您期望的那样工作,因为您希望在运行时发生npm安装docker build,并且在此实例中,ENV不使用变量,它们仅为运行时设置。

构建时变量

我们必须利用一种不同的方式将环境变量传递给 Docker,自 Docker 1.9 起可用。我们将使用略有混淆的命名 ARG 参数。

允许我们用来--build-arg传递 NPM_TOKEN 的完整示例需要向.npmrc项目添加文件。该文件应包含以下内容:

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

利用这个的Dockerfile比我们前面的例子中有更多的行允许我们使用.npmrc文件和ARG参数。

FROM risingstack/alpine:3.3-v4.3.1-3.0.1 ARG NPM_TOKEN COPY .npmrc .npmrc COPY package.json package.json RUN npm install RUN rm -f .npmrc # Add your source files COPY . . CMD npm start

这会添加预期的ARG NPM_TOKEN,但也会复制.npmrc文件,并在npm安装完成时将其删除。

要使用此 Dockerfile 和令牌构建映像,您可以运行以下命令(请注意.最后给docker构建当前目录作为参数):

docker build --build-arg NPM_TOKEN=${NPM_TOKEN} .

这将获取您当前的NPM_TOKEN环境变量,并将使用它构建Docker镜像,因此您可以npm install在当前登录用户的容器内运行!

注意:即使您删除了.npmrc文件,它也会保留在提交历史记录中 - 要完全清除您的秘密,请务必将其压缩。