GTF*_*GTF 13 node.js npm docker docker-registry npm-private-modules
我有一个在Docker容器中运行的应用程序.它需要公司私有NPM注册机构(Sinopia)的一些私有模块,访问这些模块需要用户身份验证.Dockerfile是FROM iojs:latest.
我试过了:
1)创造在项目的根的.npmrc文件,这其实没有什么区别和NPM似乎使用ENV变量忽略它2) NPM_CONFIG_REGISTRY,NPM_CONFIG_USER等等,但用户不登录.
从本质上讲,我似乎无法在docker build流程中对用户进行身份验证.我希望有人可能已经遇到这个问题(似乎是一个明显的问题)并且有一个很好的解决方法.
(最重要的是,我在Docker Hub上使用自动构建(在推送时触发),以便我们的服务器可以使用预构建的图像访问私有Docker注册表.)
有没有好的方法:1)在构建时注入NPM的凭据(所以我不必将凭据提交到我的Dockerfile)或2)以另一种方式执行此操作,我没有想到?
GTF*_*GTF 25
我在为node.js/io.js容器(you/iojs)创建基本映像时找到了一些优雅的解决方案:
.npmrc这个生成的文件示例.npmrc:
registry=https://npm.mydomain.com/
username=dockerUser
email=docker@mydomain.com
strict-ssl=false
always-auth=true
//npm.mydomain.com/:_authToken="someAuthToken"
Run Code Online (Sandbox Code Playgroud)
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" ]
Run Code Online (Sandbox Code Playgroud)
FROM you/iojs,你就可以了.2020 年,我们推出了 BuildKit。您不必通过COPY或ENV再传递秘密,因为它被认为是不安全的。
样品Dockerfile:
# syntax=docker/dockerfile:experimental
FROM node:13-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN --mount=type=ssh --mount=type=secret,id=npmrc,dst=$HOME/.npmrc \
yarn install --production --ignore-optional --frozen-lockfile
# More stuff...
Run Code Online (Sandbox Code Playgroud)
然后,您的构建命令可能如下所示:
docker build --no-cache --progress=plain --secret id=npmrc,src=/path-to/.npmrc .
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看:https : //docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information
小智 6
对于那些正在通过google找到本文并且仍在寻找不涉及在docker映像和容器上留下私有npm令牌的替代方法的人:
我们能够做的得到这个工作npm install之前docker build(通过这样做,它可以让你有你的.npmrc你的形象\容器外)。在本地安装专用模块后,您可以将文件复制到映像中,作为构建的一部分:
# Make sure the node_modules contain only the production modules when building this image
COPY . /usr/src/app
Run Code Online (Sandbox Code Playgroud)
您还需要确保您的.dockerignore文件不排除该node_modules文件夹。
将文件夹复制到图像后,诀窍是到npm rebuild 而不是npm install。这将重建受构建服务器和Docker操作系统之间的任何差异影响的所有本机依赖关系:
FROM nodesource/vivid:LTS
# For application location, default from nodesource is /usr/src/app
# Make sure the node_modules contain only the production modules when building this image
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN npm rebuild
CMD npm start
Run Code Online (Sandbox Code Playgroud)
buildkit 的答案是正确的,但它以 root 身份运行所有内容,这被认为是一种不好的安全实践。
这是一个 Dockerfile,它可以工作并使用正确的用户node作为 Dockerfile 设置的节点。注意秘密挂载有uid参数设置,否则会以 root 身份挂载,用户node无法读取。user:group另请注意 chown 为of的正确 COPY 命令node:node
FROM node:12-alpine
USER node
WORKDIR /home/node/app
COPY --chown=node:node package*.json ./
RUN --mount=type=secret,id=npm,target=./.npmrc,uid=1000 npm ci
COPY --chown=node:node index.js .
COPY --chown=node:node src ./src
CMD [ "node", "index.js" ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8793 次 |
| 最近记录: |