我正在使用 docker-compose 和一个 yml 文件来启动一个容器。我要调用的 package.json 中有两个脚本:
"dev-start": "nodemon src/index.js",
"dev-migrate": "db-migrate --migrations-dir src/migrations --config src/database.json up"
为了调用一个我使用命令:脚本名称,我怎样才能调用多个脚本?
我正在使用 docker-compose 和一个 yml 文件来启动一个容器。我要调用的 package.json 中有两个脚本:
"dev-start": "nodemon src/index.js",
"dev-migrate": "db-migrate --migrations-dir src/migrations --config src/database.json up"
为了调用一个我使用命令:脚本名称,我怎样才能调用多个脚本?
如果您想在应用程序运行时启动迁移,请使用docker exec -it name-of-container bash
在正在运行的容器中打开一个 shell 并执行命令。
如果需要在首次启动应用程序之前运行迁移,运行docker-compose run name-of-service bash
,运行初始化数据库的命令,退出并docker-compose
正常启动。
如果您想在每次启动应用程序之前运行迁移,您可以编写一个执行两个操作(迁移,然后启动应用程序)的 shell 脚本,将其复制到映像中并将其作为默认命令调用。
对于前 2 段,您也可以直接启动迁移命令而不是运行bash
在我看来,将迁移和服务器分开是更好的做法。我总是这样做,就像我有两项服务,一项用于运行我的服务器,一项用于将数据迁移到我的数据库中。如果您认为将它们分开是有意义的,因为它们正在执行两项不同的工作。
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/