Передайте переменную в Dockerfile CMD, Nodejs - PullRequest
0 голосов
/ 12 апреля 2020

Я привыкаю к ​​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

В моем ecosystem.config. js я определяю env:

env_dev: {
        NODE_ENV: 'development'
      }

Все хорошо, но на моем сервере NODE_ENV = ''. Я думаю, что что-то не так, когда я сдаю CMD, но не могу понять, что не так

1 Ответ

1 голос
/ 12 апреля 2020

Хорошо, на мой взгляд, есть другой способ сделать это, пожалуйста, попробуйте этот способ. это не будет реальный код, это будет просто идея.

ecosystem.config. js


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

И ваш файл Docker

dockerfile


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

Как описано в документации по CLI PM2, вам просто нужно запустить команду для запуска приложения с помощью команды pm2 start ecosystem.config.js, которая автоматически обращается к переменной ENV, описанной в ecosystem.config.js

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

Пожалуйста, попробуйте это, у вас могут быть новые проблемы, но надеюсь, что проблемы с некоторыми журналами ошибок, чтобы мы могли отладить больше. Но я уверен, что это может сработать и решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...