Я пытаюсь создать образ Docker для моего приложения Sails.js.Вот файл Docker:
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"]
Я предпринял шаги для этого файла Docker из по этой ссылке на сайте документации NPM.Я удостоверился, чтобы соответствовать тому, что документация там показывает отлично.
Моя команда сборки docker:
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}.Я использую точно такую же настройку в другом проекте и не вижу этой ошибки, поэтому я не совсем уверен, в чем дело.Я трижды проверил, что в этом проекте все так же, как и в другом.
Каковы возможные причины этой ошибки и некоторые возможные решения?
Я также прочитал эту ветку и этот вопрос SO .Я чувствую, что все, что я прочитал, указало мне на то же решение, которое я реализовал, но безуспешно.