Docker-compose запускает несколько скриптов

Я использую docker-compose и файл yml для запуска контейнера. В package.json есть два скрипта, которые я хочу вызвать:

"dev-start": "nodemon src/index.js",
"dev-migrate": "db-migrate --migrations-dir src/migrations --config src/database.json up"

Для вызова одного я использую команду: имя скрипта, как я могу вызвать более одного скрипта?

1 ответ

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

services:
migrate:
   build: .
   command: db-migrate --migrations-dir src/migrations --config src/database.json up
   depends_on:
     - db
   env_file:
     - .env
web:
   build: .
   command: nodemon src/index.js
   ports:
     - 8000:8000
   env_file:
     - .env
   depends_on:
     - db
     - migrate
 db:
   image: postgres:12.0-alpine
   volumes:
     - postgres_data:/var/lib/postgresql/data/

Если вы хотите запустить миграцию во время работы приложения, используйте docker exec -it name-of-container bash открыть оболочку в работающем контейнере и выполнить команду.

Если вам нужно запустить миграцию до первого запуска приложения, запустите docker-compose run name-of-service bash, запустите команду, которая инициализирует базу данных, выйдите и запустите docker-compose обычно.

Если вы хотите запускать миграции перед каждым запуском приложения, вы можете написать сценарий оболочки, который выполняет оба действия (миграция, затем запустить приложение), скопировать его в образ и вызвать его как команду по умолчанию.


Для 2 первых абзацев вы также можете напрямую запустить команду миграции вместо выполнения bash

Другие вопросы по тегам