一尘不染

docker build +私有NPM(+ private docker hub)

docker

我有一个在Docker容器中运行的应用程序。它需要公司私有NPM注册表(Sinopia)中的一些私有模块,访问这些模块需要用户身份验证。Dockerfile是FROM iojs:latest

我努力了:

1)创造在项目的根的.npmrc文件,这其实没有什么区别和NPM似乎使用ENV变量忽略它2)
NPM_CONFIG_REGISTRYNPM_CONFIG_USER等等,但用户不登录。

本质上,我似乎无法在此docker build过程中对用户进行身份验证。我希望有人可能已经遇到了这个问题(似乎是一个显而易见的问题),并且将有解决该问题的好方法。

(最重要的是,我在Docker Hub上使用了自动构建(在推送时触发),以便我们的服务器可以访问带有预构建映像的私有Docker注册表。)

有没有好的方法:1)在构建时为NPM注入凭据(因此我不必将凭据提交到Dockerfile)或2)以另一种我没想到的方式来做?


阅读 443

收藏
2020-06-17

共1个答案

一尘不染

在为您的node.js / io.js容器(you/iojs)创建基础映像时,我发现了一种有点优雅的解决方案:

  1. 使用您要用于docker的用户登录到私有npm注册表
  2. 复制.npmrc生成的文件

范例.npmrc

registry=https://npm.mydomain.com/
username=dockerUser
email=docker@mydomain.com
strict-ssl=false
always-auth=true
//npm.mydomain.com/:_authToken="someAuthToken"
  1. 创建一个适当Dockerfile复制.npmrc文件的文件。

这是我的Dockerfile(基于iojs:onbuild):

FROM iojs:2.2.1

MAINTAINER YourSelf

# Exclude the NPM cache from the image
VOLUME /root/.npm

# Create the app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Copy npm config
COPY .npmrc /root/.npmrc

# Install app
ONBUILD COPY package.json /usr/src/app/
ONBUILD RUN npm install
ONBUILD COPY . /usr/src/app

# Run
CMD [ "npm", "start" ]
  1. 制作所有的node.js / io.js容器FROM you/iojs,一切顺利。
2020-06-17