【问题标题】:Node App Error--Failed ro replace env in config: ${NPM_TOKEN}节点应用程序错误-无法替换配置中的 env:${NPM_TOKEN}
【发布时间】: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 stackdocker-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 threadthis SO question。我觉得我所阅读的所有内容都指向了我已经实施的相同解决方案,但没有成功。

【问题讨论】:

标签: node.js docker npm


【解决方案1】:

这最终对我有用:

ARG NPM_TOKEN

ENV NPM_TOKEN="${NPM_TOKEN}"

为什么这解决了这个问题,我不确定!

【讨论】:

    【解决方案2】:

    这是我正在使用的,

    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
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多