Docker-составить дамп импорта Postgresql
у меня вопрос о докере и Постгресе. Я настраиваю новую базу данных postgres каждый раз, когда docker запускается и хочет импортировать данный дамп.
моя проблема похожа, но ответов для меня недостаточно:Docker postgres не запускает init-файл в docker-entrypoint-initdb.d
Docker-Compose:
postgres:
environment:
- POSTGRES_USER=****
- POSTGRES_PASSWORD=****
- POSTGRES_DB=****
build:
context: .
dockerfile: dockerfile-postgres
My Dockerfile: (я пробовал это уже со скриптом.Ш.)
FROM postgres
ADD dump.sql /docker-entrypoint-initdb.d/
По данным https://hub.docker.com/_/postgres/ сброс.для импорта базы данных необходимо использовать sql.
запуск приложения с помощью docker дает только:
postgres_1 | LOG: invalid record length at 0/1708600
postgres_1 | LOG: redo is not required
postgres_1 | LOG: MultiXact member wraparound protections are now enabled
postgres_1 | LOG: database system is ready to accept connections
postgres_1 | LOG: autovacuum launcher started
кроме того, я проверил, была ли импортирована моя база данных, в моей базе данных нет таблицы. Что я делаю неправильно (файлы читаются и исполняются в целевой системе)? Импорт его с psql не проблема, поэтому мой дамп правильный.
Я надеюсь, что вы можете помочь мне, и я хочу поблагодарить вас заранее он.
3 ответов
хорошо, я нашел трюк, я должен выполнить "docker-compose rm", чтобы выполнить скрипты и файлы sql в этой папке. После создания и не удаления папка init игнорируется.
обновление Я снова столкнулся с этой проблемой, на этот раз удаление изображений, созданных докером, решило проблему.
ответы здесь несколько решили проблему для меня, но последний шаг, чтобы получить docker-entrypoint-initdb/*.sql
скрипты работали, чтобы убедиться, что в самих сценариях sql не было синтаксических проблем (у меня были проблемы, потому что я изменил версии SQL в своем Dockerfile).
если таковые существуют, все в docker-entrypoint-initdb/*.sql
скрипты, похоже, откатываются.
чтобы проверить, есть ли какие-либо проблемы с синтаксическим скриптом (или другие проблемы) , вам может быть полезно посмотреть на докер журналы:
$ docker ps -all
Примечание:-all
гарантирует, что он перечисляет те изображения, которые, возможно, не удалось запустить тоже.
найдите только что созданное изображение и найдите идентификатор контейнера, который должен быть хэшем из 12 символов:
$ docker logs baf32ff7ec03
помните, что вам все равно нужно следовать другим ответам здесь - которые должны rm ранее построенные изображения и удалить папку данных (резервное копирование, если вам нужно).
это происходит потому, что, скорее всего,
скрипты initdb docker-entryfile.sh
который затем отвечает за запуск /docker-entrypoint-initdb.d/*
файлы в алфавитном порядке запускаются впервые только при создании томов.
вы можете увидеть некоторые детали здесь .
решение ( работает со мной ) Это фрагмент из моего файла docker-compose
postgres_service:
build:
context : docker-postgres
dockerfile: Dockerfile-base
image: 'datahub/postgres:development'
user: postgres
ports:
- "5432:5432"
env_file:
- credentials/postgres/development.env
volumes:
- /Users/yogesh.yadav/DockerData/datahub/postgresql/data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- datahubnetwork
действия -
1) docker-compose -f docker-compose-filename.yml down
или
docker-compose -f docker-compose-filename.yml stop postgres_service
2) Удалите том / Тома (/Users / yogesh.yadav/DockerData/datahub/postgresql / data), прикрепленный с помощью службы докеров postgres_service. Вы можете сделать это вручную или через docker-compose rm
или docker volume rm
. Пожалуйста, определите ваш том, который прикреплен к этой службе postgres, прежде чем удалить его. подробнее здесь
3) Docker использует очень хорошее управление кэшем через создание изображений и их запуск. Если вы сделали не изменяйте свой Dockerfile
, docker собирается запустить уже созданный образ из кэша и запустить его. Поэтому я бы посоветовал удалить изображения и для postgres_service.
список изображений
docker images -a
выход -
REPOSITORY TAG IMAGE ID CREATED SIZE
datahub/postgres development e7707e670ad4 35 minutes ago 265 MB
удалите это изображение (при необходимости используйте-f )
docker rmi IMAGE_ID_HERE
4) перезапустите службу еще раз
docker-compose -f docker-compose-filename.yml up --build postgres_service
на этот раз вы можете видеть, что ваш docker-entrypoint.sh
и dump.sql
будет выполнять.