docker -составить и создать базу данных в Postgres при инициализации - PullRequest
0 голосов
/ 13 января 2020

У меня есть вопрос. Я довольно плохо знаком с docker, поэтому я пытаюсь создать файл docker -compose, который по команде compose также создаст базу данных. Проблема в том, что не создает БД, как я прошу это приятно. Итак, моя docker -композиция выглядит так:

version: '3'

services:
  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: 'postgres'
    volumes:
      - database_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

volumes:
  database_data:
    driver: local

И когда я запускаю docker -композицию в журнале, я вижу

db_1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1  |
db_1  | 2020-01-13 11:14:36.259 UTC [1] LOG:  starting PostgreSQL 12.1 (Debian 12.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1  | 2020-01-13 11:14:36.259 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1  | 2020-01-13 11:14:36.260 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1  | 2020-01-13 11:14:36.264 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1  | 2020-01-13 11:14:36.277 UTC [29] LOG:  database system was shut down at 2020-01-13 11:10:57 UTC
db_1  | 2020-01-13 11:14:36.280 UTC [1] LOG:  database system is ready to accept connections

В моем init SQL там только 1 строка:

CREATE DATABASE "MyDataBase";

Поскольку я перечисляю, БД является Postgres контейнером, моя БД нигде не найдена. Что может быть источником root этой проблемы?

1 Ответ

2 голосов
/ 13 января 2020

Согласно документации postgres docker image вы все сделали правильно.

Если вы хотите выполнить дополнительную инициализацию в изображении, полученном из этого , добавьте один или несколько сценариев *. sql, *. sql .gz или *. sh в /docker-entrypoint-initdb.d (при необходимости создав каталог). После того, как точка входа вызовет initdb для создания пользователя и базы данных postgres по умолчанию, она запустит любые *. sql файлы, запустит любые исполняемые *. sh сценарии и найдет все неисполняемые *. sh найденные сценарии. в этом каталоге, чтобы выполнить дальнейшую инициализацию перед запуском службы.

Но есть ловушка, которую, я думаю, вы пропустили из-за журнала, который вы разместили выше. : сценарии в /docker-entrypoint-initdb.d запускаются, только если вы запускаете контейнер с пустым каталогом данных ; любая существующая база данных останется нетронутой при запуске контейнера.

Итак, я бы попробовал очистить каталог database_data и запустить снова docker-compose up.

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