Docker создает условное отсоединение в сценарии npm

#docker #npm #docker-compose #dockerfile #package.json

Вопрос:

Я хочу запустить свое приложение узла только с помощью одной команды : npm start и , исходя NODE_ENV из этого, оно либо запустится nodemon app.js NODE_ENV=dev node app.js , либо если NODE_ENV=production , но в ОТДЕЛЬНОМ РЕЖИМЕ.

Что у меня есть до сих пор :

пакет.json

 "start": "docker-compose up --build --force-recreate api",
"api:dev": "nodemon app.js",
"api:prod": "node app.js"
 

Докерфайл

 FROM node:16-alpine
WORKDIR /app

COPY package.json .

RUN npm install

ENTRYPOINT ["/bin/sh"]
CMD ["-c", "if [ "$NODE_ENV" = "dev" ]; then npm run api:dev; else npm run api:prod; fi"]
 

И, наконец, файл docker-compose

 api:
    restart: always
    container_name: my_api
    build:
        context: .
        dockerfile: ./docker/api/Dockerfile
    depends_on:
        - postgres
    ports:
        - "${API_PORT}:${API_PORT}"
    env_file: .env
    networks:
        - back
    volumes:
        - .:/app
        - node_modules:/app/node_modules
    logging:
        options:
            max-file: "10"
            max-size: "10m"
 

Где/как я могу настроить режим условного отсоединения? Я знаю, что должен использовать -d для отсоединения docker-compose up , но я хочу, чтобы оно было условным, основанным на NODE_ENV .

Комментарии:

1. Когда вы занимаетесь реальной разработкой, хотите ли вы просто запускать nodemon ее непосредственно на хосте, не привлекая Докера?

2. @DavidMaze Нет, я тоже хочу использовать docker, это упрощенная версия моего приложения, которую я разместил там, чтобы показать проблему, само приложение более сложное, и я не хочу устанавливать node на свою машину