создать базу данных postgres, если она не существует при запуске docker-compose - PullRequest
1 голос
/ 20 мая 2019

У меня есть следующий файл docker-compose:

version: '3.5'

services:
  postgres:
    container_name: postgres_container
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
      PGDATA: /data/postgres
    volumes:
       - postgres:/data/postgres
    onrun:
      psql -h=localhost -P=${POSTGRES_PASSWORD} -U=${POSTGRES_USER} -tc "SELECT 1 FROM pg_database WHERE datname = 'premiership'" | grep -q 1 || psql -h=localhost -P=${POSTGRES_PASSWORD}-U=${POSTGRES_USER}c "CREATE DATABASE premiership"
    ports:
      - "5432:5432"
    networks:
      - postgres
    restart: unless-stopped

Вышеприведенное не работает, потому что в сервисах docker-compose нет запуска.

Все, что я хочу сделать, это создать базу данных, если она не существует, но это безумно сложно, потому что я не знаю, когда служба работает.

Также это нелегко сделать в postgres. Я попытался сопоставить том, чтобы запустить initdb.sql:

volumes:
   - postgres:/data/postgres
   - ./initdb/1_schema.sql:/docker-entrypoint-initdb.d/1_schema.sql

1_schema.sql выглядит так:

SELECT datname
FROM pg_database
WHERE datname='premiership'';
    IF datname='
premiership' 
        THEN CREATE DATABASE premiership PASSWORD 'test';
    END IF;

База данных не создается, и когда я запускаю docker-compose logs Я не вижу ничего о запуске сценария.

1 Ответ

2 голосов
/ 20 мая 2019

Вы пробовали установить переменную POSTGRES_DB в вашей среде docker-compose.yml?

 image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
      POSTGRES_DB: premiership
      PGDATA: /data/postgres
    volumes:

см. https://hub.docker.com/_/postgres:

POSTGRES_DB

Эта необязательная переменная среды может использоваться для определения другого имени для базы данных по умолчанию, которая создается при первом запуске образа.Если он не указан, будет использовано значение POSTGRES_USER.

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