Ошибка приложения узла - Не удалось заменить env в конфигурации: $ {NPM_TOKEN}

Я пытаюсь создать образ Docker для своего приложения Sails.js. Вот Dockerfile:

FROM risingstack/alpine:3.4-v8.5.0-4.7.0

ENV NODE_ENV test

RUN npm install -g sails

COPY npmrc_file .npmrc
ARG NPM_TOKEN

COPY package.json package.json
RUN npm install

RUN rm -f .npmrc

# Add your source files
COPY . .

EXPOSE 3000
CMD ["npm","start"]

Я сделал шаги для этого Dockerfile из эта ссылка на сайте документации NPM. Я убедился, что идеально соответствует тому, что там показано в документации.

Моя команда сборки докера:

image = "my-repo-url/tagname:tagversion"
docker build --build-arg NPM_TOKEN=my-token-goes-here -t $image -f Dockerfile .

Затем я запускаю контейнер с образом с помощью docker stack или docker-compose. Контейнер не запускается из-за следующей ошибки:

sails_1    | Error: Failed to replace env in config: ${NPM_TOKEN}
sails_1    |     at /usr/lib/node_modules/npm/lib/config/core.js:418:13
sails_1    |     at String.replace (<anonymous>)
sails_1    |     at envReplace (/usr/lib/node_modules/npm/lib/config/core.js:414:12)
sails_1    |     at parseField (/usr/lib/node_modules/npm/lib/config/core.js:392:7)
sails_1    |     at /usr/lib/node_modules/npm/lib/config/core.js:335:17
sails_1    |     at Array.forEach (<anonymous>)
sails_1    |     at Conf.add (/usr/lib/node_modules/npm/lib/config/core.js:334:23)
sails_1    |     at ConfigChain.addString (/usr/lib/node_modules/npm/node_modules/config-chain/index.js:244:8)
sails_1    |     at Conf.<anonymous> (/usr/lib/node_modules/npm/lib/config/core.js:322:10)
sails_1    |     at /usr/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
sails_1    | /usr/lib/node_modules/npm/lib/npm.js:52
sails_1    |       throw new Error('npm.load() required')
sails_1    |       ^
sails_1    |
sails_1    | Error: npm.load() required
sails_1    |     at Object.get (/usr/lib/node_modules/npm/lib/npm.js:52:13)
sails_1    |     at process.errorHandler (/usr/lib/node_modules/npm/lib/utils/error-handler.js:213:18)
sails_1    |     at emitOne (events.js:115:13)
sails_1    |     at process.emit (events.js:210:7)
sails_1    |     at process._fatalException (bootstrap_node.js:399:26)

Дело в том, что к тому времени, когда мы приступим к запуску контейнера, не должно быть никаких ссылок на $ {NPM_TOKEN} или необходимости в нем. Я использую точно такую ​​же настройку в другом проекте и не вижу этой ошибки, поэтому я не совсем уверен, в чем дело. Я трижды проверил, что в этом проекте все так же, как и в другом.

Каковы возможные причины этой ошибки и возможные решения?

Я также прочитал эта ветка и этот ТАК вопрос. Мне кажется, все, что я прочитал, указывало на то же решение, которое я реализовал, но безуспешно.

Здесь вы можете найти мое решение stackoverflow.com/a/67648863/14178236

Aman Gupta 22.05.2021 13:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
3 840
2

Ответы 2

Вот что у меня сработало в итоге:

ARG NPM_TOKEN

ENV NPM_TOKEN = "${NPM_TOKEN}"

Почему это решило эту проблему, я не уверен!

Это то, что я использую,

в Dockerfile

ARG NPM_AUTH_TOKEN=$NPM_AUTH_TOKEN
ENV NPM_AUTH_TOKEN=$NPM_AUTH_TOKEN

и в docker-compose.yml

version: '2'
services:
  app:
    build:
      args:
        - NPM_AUTH_TOKEN

Другие вопросы по теме