簡體   English   中英

在 Docker 中使用私有 npm repo

[英]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設置auth令牌的方法。

另外,您可能希望考慮不要一個接一個地使用多個RUN命令。 這會導致為每個命令創建一個新的圖像層,並且可能會大量膨脹容器的大小。 嘗試在命令末尾使用&& \\ ,然后將下一個命令放在沒有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 集配置中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM