#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 на свою машину