基本認証資格情報を持つsinopiaを使用してホストされているプライベートnpmリポジトリがあります。そして、私たちのアプリケーションはプライベートリポジトリのnpmパッケージを使用しています。認証トークンを作成して試しましたが、次の行でエラーが発生しますRUN npm install [email protected]
:
npm ERR! code E403 npm ERR! 403 Forbidden: [email protected] 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 [email protected]
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)
誰かがこれで私を助けることができますか?
パッケージ[email protected]
はあなたのプライベートパッケージだと思いますか?その場合、認証トークンが使用されていないか、何らかの理由でそのパッケージにアクセスできないように見えます。
構成~/.npmrc
セットを使用するのではなく、ファイルを書き込んでみることができます。これは、次を使用する場合にすぎません。
RUN echo -e "//private.repo/:_authToken=... > ~/.npmrc
これにより、Dockerユーザーは、定義されたレジストリに対してそのトークンを使用して認証されます。これは、ほとんどの場合、npmの認証トークンを設定する方法です。
ちなみに、複数の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 [email protected] && \
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" ]
読みやすくする必要がありますが、最終的なイメージは小さくなり、ビルドが少し速くなる可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加