docker-compose и создать базу данных в Postgres при инициализации

У меня вопрос. Я новичок в docker, поэтому 9X_docker я пытаюсь создать файл docker-compose, который 9X_docker-compose при команде compose также создаст базу данных. Проблема 9X_docker-compose в том, что БД не создается, как я хорошо 9X_docker об этом спрашиваю. Итак, мой docker-compose 9X_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-compose 9X_docker-compose up в журнале, я вижу

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 есть 9X_docker-compose только одна строка:

CREATE DATABASE "MyDataBase";

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

52
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: docker-compose и создать базу данных в Postgres при инициализации

Если при запуске Docker Compose вы получаете:

PostgreSQL Database directory appears to contain a database; Skipping initialization

вам 9X_docker необходимо заранее удалить тома, которые 9X_docker-compose были настроены для хранения базы данных.

Команда 9X_docker-compose docker-compose down не делает этого автоматически.

Вы можете 9X_docker-compose запросить удаление томов следующим образом:

docker-compose down --volumes

87
2

  • ой. Это определенно экономит время - тратил вре ...

Ответ #2

Ответ на вопрос: docker-compose и создать базу данных в Postgres при инициализации

Согласно documentation of postgres docker image, вы все сделали правильно.

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

Но есть уловка, которую, я думаю, вы 9X_docker-compose упустили, судя по журналу, который вы опубликовали 9X_docker выше.

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

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

31
1

  • У меня нет томов для хранения данных после закрытия контейнера, и я получаю то же сообщение журнала. Что мне н ...

Ответ #3

Ответ на вопрос: docker-compose и создать базу данных в Postgres при инициализации

Была аналогичная проблема, и у меня сработало 9X_docker-compose удаление контейнеров и томов

Список всех 9X_docker-compose контейнеров по идентификатору:

docker container ls -qa

запустите 9X_docker это для каждого контейнера:

docker container rm [id]

То же самое и 9X_docker с объемами:

docker volume ls
docker volume rm [VolumeName]

и когда я docker-compose up -d все работает хорошо

reference for removing from docker

15
0

Ответ #4

Ответ на вопрос: docker-compose и создать базу данных в Postgres при инициализации

Мне пришлось сделать: docker-compose down --volumes, чтобы сначала удалить 9X_docker-compose тома.

А затем пришлось использовать: docker-compose up --build, чтобы 9X_docker-compose убедиться, что PostGres использует файлы 9X_docker sql.

Также убедитесь, что каталог db находится 9X_docker-compose на том же уровне, что и файл докера.

4
0

Ответ #5

Ответ на вопрос: docker-compose и создать базу данных в Postgres при инициализации

В моем случае я не объявлял том в /var/lib/postgresql/data, но всегда 9X_docker создавался том в /var/lib/docker/volumes/, и данные сохранялись 9X_docker-compose после остановки и запуска контейнера.

Итак, я 9X_docker-compose заставил воссоздать анонимные тома.

docker-compose up --renew-anon-volumes

При этом 9X_docker вам не нужно будет каждый раз очищать каталог 9X_docker-compose database_data и снова запускать docker-compose up.

1
0