在 Docker 中使用私有 npm 存储库
Use private npm repo in Docker
我们有一个使用 sinopia 托管的私有 npm 存储库,它具有基本的身份验证凭据。我们的应用程序使用私有仓库的 npm 包。我创建了身份验证令牌并进行了尝试,但在 RUN npm install utilities@0.1.9
:
行出现错误
npm ERR! code E403
npm ERR! 403 Forbidden: utilities@0.1.9
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-07-05T10_55_25_752Z-debug.log
而我的 Dockerfile
是:
FROM keymetrics/pm2:latest-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json ./
COPY .npmrc ./
RUN npm config set registry http://private.repo/:_authToken=CqgPS5l++vjD0n6ynxrVNg==.
RUN npm install utilities@0.1.9
RUN apk update && apk add yarn python g++ make && rm -rf /var/cache/apk/*
RUN set NODE_ENV=production
RUN npm config set registry https://registry.npmjs.org/
RUN npm install
COPY . /app
RUN ls -al -R
EXPOSE 51967
CMD [ "pm2-runtime", "start", "pm2.json" ]
错误日志是:
11 verbose stack at tryCatcher (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
11 verbose stack at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:512:31)
11 verbose stack at Promise._settlePromise (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:569:18)
11 verbose stack at Promise._settlePromise0 (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10)
11 verbose stack at Promise._settlePromises (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:693:18)
11 verbose stack at Async._drainQueue (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:133:16)
11 verbose stack at Async._drainQueues (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:143:10)
11 verbose stack at Immediate.Async.drainQueues (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:17:14)
11 verbose stack at runCallback (timers.js:794:20)
11 verbose stack at tryOnImmediate (timers.js:752:5)
11 verbose stack at processImmediate [as _immediateCallback] (timers.js:729:5)
谁能帮我解决这个问题?
我猜包裹 utilities@0.1.9
是你的私人包裹?如果是这样,您的授权令牌似乎未被使用或出于某种原因无法访问该包。
您可以尝试编写 ~/.npmrc
文件而不是使用配置集,这只是使用的一种情况:
RUN echo -e "//private.repo/:_authToken=... > ~/.npmrc
这将导致您的 docker 用户使用该令牌对定义的注册表进行身份验证。这就是我们在大多数情况下为 npm 设置身份验证令牌的方式。
附带说明一下,您可能要考虑不要一个接一个地使用多个 运行 命令。这会导致为每个命令创建一个新的图像层,并且会大大增加容器的大小。尝试在命令末尾使用 && \
,然后将下一个命令放在新的一行上,不要使用 RUN
位。例如:
FROM keymetrics/pm2:latest-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json ./
COPY .npmrc ./
RUN npm config set registry http://private.repo/:_authToken=$AUTH_TOKEN && \
npm install utilities@0.1.9 && \
apk update && apk add yarn python g++ make && rm -rf /var/cache/apk/* && \
set NODE_ENV=production && \
npm config set registry https://registry.npmjs.org/ && \
npm install
COPY . /app
RUN ls -al -R
EXPOSE 51967
CMD [ "pm2-runtime", "start", "pm2.json" ]
它应该同样可读,但最终图像应该更小并且构建起来可能会更快一些。
我的解决方案是在 dockerfile set configuration
ENV NPM_CONFIG_REGISTRY=https://privatedomain.com
ENV NPM_CONFIG_USERNAME=username
ENV NPM_CONFIG_EMAIL=my@email.com
ENV NPM_CONFIG_PASSWORD=my password
RUN npm set registry https://privatedomain.com
Docker 版本 20.10.7,构建 20.10.7-0ubuntu5~21.04.2
节点 v17.0.1
我们有一个使用 sinopia 托管的私有 npm 存储库,它具有基本的身份验证凭据。我们的应用程序使用私有仓库的 npm 包。我创建了身份验证令牌并进行了尝试,但在 RUN npm install utilities@0.1.9
:
npm ERR! code E403 npm ERR! 403 Forbidden: utilities@0.1.9 npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2018-07-05T10_55_25_752Z-debug.log
而我的 Dockerfile
是:
FROM keymetrics/pm2:latest-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json ./
COPY .npmrc ./
RUN npm config set registry http://private.repo/:_authToken=CqgPS5l++vjD0n6ynxrVNg==.
RUN npm install utilities@0.1.9
RUN apk update && apk add yarn python g++ make && rm -rf /var/cache/apk/*
RUN set NODE_ENV=production
RUN npm config set registry https://registry.npmjs.org/
RUN npm install
COPY . /app
RUN ls -al -R
EXPOSE 51967
CMD [ "pm2-runtime", "start", "pm2.json" ]
错误日志是:
11 verbose stack at tryCatcher (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23) 11 verbose stack at Promise._settlePromiseFromHandler (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:512:31) 11 verbose stack at Promise._settlePromise (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:569:18) 11 verbose stack at Promise._settlePromise0 (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10) 11 verbose stack at Promise._settlePromises (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:693:18) 11 verbose stack at Async._drainQueue (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:133:16) 11 verbose stack at Async._drainQueues (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:143:10) 11 verbose stack at Immediate.Async.drainQueues (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/async.js:17:14) 11 verbose stack at runCallback (timers.js:794:20) 11 verbose stack at tryOnImmediate (timers.js:752:5) 11 verbose stack at processImmediate [as _immediateCallback] (timers.js:729:5)
谁能帮我解决这个问题?
我猜包裹 utilities@0.1.9
是你的私人包裹?如果是这样,您的授权令牌似乎未被使用或出于某种原因无法访问该包。
您可以尝试编写 ~/.npmrc
文件而不是使用配置集,这只是使用的一种情况:
RUN echo -e "//private.repo/:_authToken=... > ~/.npmrc
这将导致您的 docker 用户使用该令牌对定义的注册表进行身份验证。这就是我们在大多数情况下为 npm 设置身份验证令牌的方式。
附带说明一下,您可能要考虑不要一个接一个地使用多个 运行 命令。这会导致为每个命令创建一个新的图像层,并且会大大增加容器的大小。尝试在命令末尾使用 && \
,然后将下一个命令放在新的一行上,不要使用 RUN
位。例如:
FROM keymetrics/pm2:latest-alpine
RUN mkdir -p /app
WORKDIR /app
COPY package.json ./
COPY .npmrc ./
RUN npm config set registry http://private.repo/:_authToken=$AUTH_TOKEN && \
npm install utilities@0.1.9 && \
apk update && apk add yarn python g++ make && rm -rf /var/cache/apk/* && \
set NODE_ENV=production && \
npm config set registry https://registry.npmjs.org/ && \
npm install
COPY . /app
RUN ls -al -R
EXPOSE 51967
CMD [ "pm2-runtime", "start", "pm2.json" ]
它应该同样可读,但最终图像应该更小并且构建起来可能会更快一些。
我的解决方案是在 dockerfile set configuration
ENV NPM_CONFIG_REGISTRY=https://privatedomain.com
ENV NPM_CONFIG_USERNAME=username
ENV NPM_CONFIG_EMAIL=my@email.com
ENV NPM_CONFIG_PASSWORD=my password
RUN npm set registry https://privatedomain.com
Docker 版本 20.10.7,构建 20.10.7-0ubuntu5~21.04.2 节点 v17.0.1