当前位置: 首页 > 面试题库 >

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

姜楷
2023-03-14
问题内容

我有一个在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)以另一种我没想到的方式来做?


问题答案:

在为您的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,一切顺利。


 类似资料:
  • 问题内容: 我正在尝试将我的应用程序部署到Heroku,但是我依靠使用一些私有git repos作为模块。我这样做是为了在项目之间重复使用代码,例如,我有一个用于多个应用程序的自定义记录器。 问题是Heroku显然没有ssh访问此代码。关于这个问题,我找不到任何东西。理想情况下,Heroku具有一个公共密钥,我可以将其添加到模块中。 问题答案: 简而言之,这是不可能的。我想出的解决此问题的最佳方法

  • 如何在?我尝试了npm的Github URL语法,比如,但是在包文件夹中执行会导致私有依赖项出现“无法安装”错误。是否有一种特殊的语法(或其他机制)来依赖私有回购协议?

  • 错误------------------------------------------------- npm安装失败,代码为%1 npm错误!代码为npm错误!syscall spawn git npm错误!路径git npm错误!errno ENOENT npm err!执行时发生错误:npm错误!Enent未定义的ls-remote-h-t ssh:/git@github.com/priva

  • 本书之前提到了“封装”的概念,即指将一系列指令放在一个函数体内部的处理过程。而这样的做法则是为了将函数的接口与它的实现分离(函数接口指如何使用这个函数,函数实现则指如何去实现这个函数及实现具体做了些什么)。 上面提到这种封装可以命名为“功能封装”,用以区分本章将要介绍的“数据封装”。数据封装是基于这样的理念提出的:每一个结构的定义应当包括应用于本结构的函数集以及阻止对内部的无限制访问。 数据封装的

  • 在任何语言中,都会规定某些对象(属性、方法、函数、类等)只能够在某个范围内访问,出了这个范围就不能访问了。这是“公”、“私”之分。此外,还会专门为某些特殊的东西指定一些特殊表示,比如类的名字就不能用class,def等,这就是保留字。除了保留字,python中还为类的名字做了某些特殊准备,就是“专有”的范畴。 私有函数 在某些时候,会看到有一种方法命名比较特别,是以“__”双划线开头的,将这类命名

  • 问题内容: 我正在尝试通过npm安装github私有存储库,其中包括其他私有github存储库作为依赖项。 尝试了很多方法和帖子,但是都没有用。这是我在做什么: 在package.json中就像: 正确的方法是什么? 问题答案: 以下在我需要的所有情况下都可以正常工作: