【发布时间】:2019-05-18 07:37:03
【问题描述】:
我正在尝试为我的 Sails.js 应用程序构建 Docker 映像。这是 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"]
我从 NPM 文档站点上的 this link 采取了此 Dockerfile 的步骤。我确保与那里的文档完美匹配。
我的 docker build 命令是:
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} 的引用或需要。我在另一个项目中使用了完全相同的设置,但没有看到这个错误,所以我不确定这是什么问题。我已经三次检查了这个项目中的一切是否与另一个项目相同。
这个错误的可能原因和一些可能的解决方案是什么?
我还阅读了this thread 和this SO question。我觉得我所阅读的所有内容都指向了我已经实施的相同解决方案,但没有成功。
【问题讨论】:
-
在这里你可以找到我的解决方案stackoverflow.com/a/67648863/14178236