docker-compose运行命令

时间:2019-07-18 19:20:47

标签: docker docker-compose

我有以下docker-compose文件

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-app包含一个migrations.sql和seed.sql文件。我想在容器启动后运行它们。

如果我手动运行命令,它们将像这样

docker exec nd-db psql admin admin -f /sql/migrations.sql
docker exec nd-db psql admin admin -f /sql/seeds.sql

2 个答案:

答案 0 :(得分:0)

docker-composer -f path/to/config.yml name_of_container nd-db psql admin admin -f /sql/migrations.sql工作吗?

我发现从笔记本电脑运行命令时必须指定配置和容器。

答案 1 :(得分:0)

使用此docker-compose文件运行up时,它将在启动nd-db和nd-app容器时运行container entrypoint命令。对于nd-db,这会做一些准备工作,然后启动postgres数据库。

entrypoint命令在Dockerfile中定义,并且期望将ENTRYPOINTCMD的配置位进行组合。您可能要做的是在自定义Dockerfile中覆盖ENTRYPOINT,或者在docker-compose.yml中overriding覆盖它。

postgres:9.6 Dockerfile,它有以下两行:

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]

您可以在docker-compose.yml中的nd-db配置中添加以下内容,以保留现有入口点,还可以“菊花链式”自定义migration-script.sh步骤。

entrypoint: ["docker-entrypoint.sh", "migration-script.sh"]

自定义脚本仅需要一种特殊的行为:它需要对以下任何参数进行直通执行,因此容器将继续启动postgres:

#!/usr/bin/env bash
set -exo pipefail
psql admin admin -f /sql/migrations.sql
psql admin admin -f /sql/seeds.sql
exec "$@"