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