docker-compose: запустить команду в контейнере pgsql - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь запустить следующий docker-compose файл:

version: "3"
services:
  db:
    image: postgres
    container_name: pgsql
    environment:
      - foo=foo
      - bar=bar
    volumes:
      - ./sql/:/opt/sql
    command: bash /opt/sql/create-db.sql
#    command: ps -aux
  web:
    image: benit/debian-web
    container_name: web
    depends_on:
      - db
    ports:
      - 80:80
    volumes:
      - ./html:/var/www/html

Я сталкиваюсь с ошибкой в ​​строке:

command: bash /opt/sql/create-db.sql

Это потому, что служба pgsql не запущена. Может контролироваться с помощью command: ps -aux

Как запустить мой скрипт после запуска службы pgsql?

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать том для предоставления сценария инициализации sql:

version: "3"
services:
  db:
    image: postgres
    container_name: pgsql
    environment:
      - foo=foo
      - bar=bar
    volumes:
      - ./sql/:/opt/sql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  web:
    image: benit/debian-web
    container_name: web
    depends_on:
      - db
    ports:
      - 80:80
    volumes:
      - ./html:/var/www/html

Это будет работать, потому что оригинальный dockerfile Posgresql содержит скрипт (который запускается после запуска Posrgres), который будет выполнять любые файлы *.sql из папки /docker-entrypoint-initdb.d/.

При монтировании локального тома в этом месте ваши sql-файлы будут запущены в нужное время.

Это фактически упоминается в документации для этого изображения: https://hub.docker.com/_/postgres в разделе How to extend this image.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...