【问题标题】:Pass variable to Dockerfile CMD, Nodejs将变量传递给 Dockerfile CMD、Nodejs
【发布时间】:2020-04-12 12:14:32
【问题描述】:

我已经习惯了 Docker。这是我当前在 DockerFile 中的代码:

FROM node:12-alpine AS builder
ARG NODE_ENV
ENV NODE_ENV ${NODE_ENV}
RUN npm run build
CMD ["sh","-c","./start-docker.sh ${NODE_ENV}"]

我正在使用 pm2 在 Nodejs 中管理集群,这是我的 start-docker.sh

NODE_PATH=. pm2-runtime ./ecosystem.config.js --env $NODE_ENV

在我的生态系统.config.js 中,我定义了一个环境:

env_dev: {
        NODE_ENV: 'development'
      }

一切正常,但在我的服务器上,NODE_ENV=''。我认为当我传入我的 CMD 时有问题,但无法找出问题所在

【问题讨论】:

  • 我们能有错误吗,是服务器上的commig
  • 不幸的是,没有错误,所以我卡住了:(
  • 为什么不设置服务器的操作系统环境变量?
  • start-docker.sh 里面有什么?根据文档,您不需要像这样传递 ARG。您需要在运行命令中传递生态系统文件

标签: node.js docker dockerfile


【解决方案1】:

好吧,我认为还有另一种方法可以做到这一点,请尝试这种方式。这不是实际的代码,只是一个想法。

生态系统.config.js


module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }]
}

还有你的 dockerfile

码头文件


FROM node:12-alpine
RUN npm run build
CMD ["pm2","start","ecosystem.config.js"]

如 PM2 CLI 文档中所述,您只需运行命令即可使用命令 pm2 start ecosystem.config.js 启动应用程序,这将自动访问 ecosystem.config.js 中描述的 ENV 变量

https://pm2.keymetrics.io/docs/usage/application-declaration/#cli

请试试这个,你可能有新的问题,但希望有一些错误日志的问题,以便我们可以更多地调试。但我相信这可以解决您的问题

【讨论】:

  • 在文档中,他们说我必须将参数作为“--env production”传递,这就是为什么我需要将 NODE_ENV 传递给我的命令
  • 是吗?我以为这很简单。只需运行命令 pm2 启动生态系统文件名。好的,我们可以很容易地通过 docker-compose 传递环境变量。如果您仍然需要解决方案,我可以提供。
猜你喜欢
  • 1970-01-01
  • 2021-04-25
  • 2018-04-27
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多