首页 > 解决方案 > 将变量传递给 Dockerfile CMD、Nodejs

问题描述

我已经习惯了 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 时有问题但无法找出问题所在

标签: node.jsdockerdockerfile

解决方案


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

生态系统.config.js


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

还有你的 dockerfile

dockerfile


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

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

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

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


推荐阅读