【问题标题】:Why does my node container ignore the environment variable I set in docker-compose.yml?为什么我的节点容器会忽略我在 docker-compose.yml 中设置的环境变量?
【发布时间】:2017-11-23 22:06:39
【问题描述】:

在我的 docker-compose.yml 中,我设置了环境 NODE_ENV

node2:
    image: ...
    environment:
     - "NODE_ENV=production"

我的 Dockerfile,

FROM node:latest
... //all the ususal stuff
CMD ["npm", "start"]

我的 npm,

  "scripts": {
    "start": "NODE_ENV=development node --inspect ./bin/www"
  },

但是当我运行 docker-compose up 时,我发现 nodejs 代码仍然在开发中运行,而不是在生产中。这是为什么呢?

我的第二个问题是,在没有 docker 的情况下运行我的 nodejs 时,即使用npm start,我希望它在开发模式下运行,但在生产模式下运行 docker?

----更新-----

对于我的第一个问题,现在我知道这是我的npm start 覆盖了 docker-composer.yml 中的 NODE_ENV=production,而不是相反。

但是对于我的第二个问题,我仍在寻找一个简单的解决方案。

感谢到目前为止我得到的答案。

【问题讨论】:

  • 当您在启动脚本中覆盖 NODE_ENV 时,它不应该在 development 中运行吗?
  • 也许我错了:$。我原以为 docker-compose.yml 中的环境变量会覆盖 Dockerfile 中的设置。

标签: node.js docker npm docker-compose


【解决方案1】:

这篇文章“Working with Environment Variables in Node.js”给了我一些思考。

所以我首先按照它的建议使用了if-env,而我的npm script 看起来像这样,

  "scripts": {
    "start": "if-env NODE_ENV=production && npm run start:prod || npm run start:dev",
    "start:dev": "DEBUG=dummy-app:* node --inspect ./bin/www",
    "start:prod": "node ./bin/www"
   }

但正如https://github.com/ericclemmons/if-env/issues/6 所说,更重要的是,我需要一种简单的方法来设置环境变量并在必要时覆盖它们,我现在使用的是per-env,而我的npm script 看起来像这样,

  "per-env": {
    "production": {
      "DBPASS":"superman", //this can be overwrote again 
    },
    "development":{
      "DBPASS":"batman",
      "DEBUG":"dummy-app:*",
    }
  },
  "scripts": {
    "start":"per-env",
    "start:development": "node --inspect ./bin/www",
    "start:production": "node ./bin/www"
  },

【讨论】:

    【解决方案2】:

    我的第一个猜测是在您的package.json 中针对不同的环境设置不同的npm script 条目,例如用于生产的start 和用于开发/调试的inspect - 根据ENV_VARS

    但是,如果您想坚持使用一个script,那么您可以考虑使用bash 默认值,例如${parameter:-default} 用于NODE_ENV,如果它尚未设置(由Docker):

    "start": "NODE_ENV=${NODE_ENV:-development} node --inspect ./bin/www"
    

    参考:
    http://www.tldp.org/LDP/abs/html/parameter-substitution.html
    https://glebbahmutov.com/blog/shell-variables-in-npm-scripts/

    【讨论】:

    • 查看我的答案(花了几个小时搜索:$)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-12-07
    • 2016-12-07
    • 1970-01-01
    • 2012-04-05
    • 2020-10-22
    相关资源
    最近更新 更多