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 нет. В чем может быть причина этой проблемы?
Ответ #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
- ой. Это определенно экономит время - тратил вре ...
Ответ #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
.
- У меня нет томов для хранения данных после закрытия контейнера, и я получаю то же сообщение журнала. Что мне н ...
Ответ #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
Ответ #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 на том же уровне, что и файл докера.
Ответ #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
.
-
7
-
2
-
4
-
27
-
1
-
3
-
10
-
3
-
15
-
11
-
9
-
8
-
4
-
4
-
3
-
7
-
8
-
8
-
18
-
16
-
6
-
11
-
7
-
1
-
2
-
3
-
3
-
3
-
6
-
6
-
3
-
1
-
10
-
4
-
4
-
5
-
6
-
3
-
4
-
7
-
7
-
1
-
2
-
8
-
1
-
1
-
8
-
1
-
4
-
3