Docker 和私有包
Docker 和私有包
如果您已阅读使用私有软件包,您将知道为了使用私有软件包,您需要通过 npm CLI 登录到 npm。
如果您在无法直接登录的环境中使用npm私有软件包(例如在 CI 服务器或 Docker 容器内),则需要获取并导出npm标记作为环境变量。那个标记应该是这样的NPM_TOKEN=00000000-0000-0000-0000-000000000000
。
在获得身份验证令牌可以帮助你生成令牌。
如果这是您需要的工作流程,请阅读 CI 服务器配置文档。如果这适用于您的系统,那么,完美。
如果没有,这里我们将在npm install
Docker容器内运行时查看此工作流的问题。
运行时变量
如果您有以下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
文件,它也会保留在提交历史记录中 - 要完全清除您的秘密,请务必将其压缩。