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

我有以下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
        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,让应用程序构建和命令自动运行。