docker在启动后编写运行命令
我有以下docker撰写文件docker在启动后编写运行命令,docker,docker-compose,Docker,Docker Compose,我有以下docker撰写文件 version: '3.2' services: nd-db: image: postgres:9.6 ports: - 5432:5432 volumes: - type: volume source: nd-data target: /var/lib/postgresql/data - type: volume source: nd-sql
version: '3.2'
services:
nd-db:
image: postgres:9.6
ports:
- 5432:5432
volumes:
- type: volume
source: nd-data
target: /var/lib/postgresql/data
- type: volume
source: nd-sql
target: /sql
environment:
- POSTGRES_USER="admin"
nd-app:
image: node-docker
ports:
- 3000:3000
volumes:
- type: volume
source: ndapp-src
target: /src/app
- type: volume
source: ndapp-public
target: /src/public
links:
- nd-db
volumes:
nd-data:
nd-sql:
ndapp-src:
ndapp-public:
nd应用程序包含migrations.sql和seeds.sql文件。我想在容器装上后运行它们
如果我手动运行这些命令,它们将如下所示
docker exec nd-db psql admin admin -f /sql/migrations.sql
docker exec nd-db psql admin admin -f /sql/seeds.sql
docker composer-f path/to/config.yml name\u容器和db psql admin-f/sql/migrations.sql
我发现,在从笔记本电脑运行命令时,必须指定配置和容器 使用此docker compose文件运行
up
时,它将为nd db和nd app容器运行容器入口点命令,作为启动它们的一部分。对于nd db,这会做一些准备工作,然后启动postgres数据库
entrypoint命令在Dockerfile中定义,并期望将和的配置位组合在一起。您可以在自定义Dockerfile或docker-compose.yml中重写入口点
看一下,它有以下两行:
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]
您可以将以下内容添加到docker-compose.yml中的nd db配置中,以保留现有的入口点,还可以使用自定义的迁移脚本.sh
步骤“菊花链”
entrypoint: ["docker-entrypoint.sh", "migration-script.sh"]
自定义脚本只需要一个特殊行为:它需要对以下任何参数执行passthru执行,因此容器继续启动postgres:
#/usr/bin/env bash
set-exo pipefail
psql admin-f/sql/migrations.sql
psql admin-f/sql/seeds.sql
执行官“$@”
我希望找到一种在docker compose文件中运行命令的方法。只需运行docker compose,让应用程序构建和命令自动运行。