Использовать личное репозиторий npm в Docker - PullRequest
0 голосов
/ 05 июля 2018

У нас есть частное репозиторий npm, размещенный с использованием sinopia, с базовыми учетными данными. И наше приложение использует пакет частного репозитория 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)

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, пакет utilities@0.1.9 это ваш личный пакет? В таком случае может показаться, что ваш токен аутентификации либо не используется, либо по какой-то причине не имеет доступа к этому пакету.

Вы можете попытаться записать файл ~/.npmrc вместо использования набора конфигурации, это просто случай использования:

RUN echo -e "//private.repo/:_authToken=... > ~/.npmrc

Это приведет к тому, что ваш пользователь-докер затем аутентифицируется с использованием этого токена в указанном реестре. Так мы устанавливаем токены авторизации для 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 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" ]

Он должен быть таким же читабельным, но конечное изображение должно быть меньше и потенциально немного быстрее для сборки.

...