Я пытаюсь создать контейнер PostgreSQL, который уже содержит данные разработки. Я могу видеть данные, которые я создал, но когда я совершить
, толкать
, и тяга
изображение, данных нет.
Ниже мой Dockerfile:
ОТ постгис/постгис:11-2.5
ОБСЛУЖИВАТЕЛЬ Я
# Содержимое файла 20-init_db.sql:
# СОЗДАТЬ РАСШИРЕНИЕ, ЕСЛИ НЕ СУЩЕСТВУЕТ btree_gist;
# СОЗДАТЬ РАСШИРЕНИЕ, ЕСЛИ НЕ СУЩЕСТВУЕТ hstore;
КОПИРОВАТЬ ./20-init_db.sql/docker-entrypoint-initdb.d/20-init_db.sql
КОПИРОВАТЬ ./make_data.sh /make_data.sh
Я создаю контейнер с помощью приведенного ниже сценария, и данные успешно заполняются.
#!/бин/баш
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com
aws ecr create-repository --repository-name dev_postgres --region us-east-1
# Убедитесь, что среда сборки чистая
остановка докера dev_postgres_container
докер rm dev_postgres_container
докер рми dev_postgres_img
# Подготовить контейнер
docker build -f postgres.Dockerfile -t dev_postgres_img .
docker run -d --name dev_postgres_container \
-e POSTGRES_DB=база_данных \
-e POSTGRES_USER=пользователь_\
-e POSTGRES_PASSWORD=пароль \
-e PGDATA=/var/lib/postgresql/data/pgdata
dev_postgres_img
docker exec -it dev_postgres_container bash /make_data.sh
###
### Это возвращает правильное количество пользователей, поэтому на данный момент в контейнере есть данные.
###
docker exec -it dev_postgres_container /usr/bin/psql -U the_user the_database -c "выберите количество (*) из auth_user;"
# Зафиксируйте состояние контейнера и сохраните его в Amazon ECR:
docker commit $(docker ps -q --filter "name=dev_postgres_container") 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data
# Также пометьте его «последним» и отметкой времени
тег докера 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
тег докера 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:$( date -u +%Y%m%d_%H%MZ )-с-данными
# Толкать
docker push 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres --all-tags
Однако, когда я извлекаю контейнер в изолированной среде, данных нет:
заварить установить виртуальный бокс
варить установить мультипасс
sudo multipass set local.driver=virtualbox
многопроходный запуск --name ubuntu2
многопроходное монтирование ~/.aws ubuntu2:/home/ubuntu/.aws
многопроходное монтирование ./db ubuntu2:/home/ubuntu/db
многопроходный exec ubuntu2 -- bash /home/ubuntu/db/test_db_container.sh
### Содержимое test_db_container.sh ниже: ###
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt-get install -y awscli
# Вытащите контейнер Docker:
aws ecr get-login-password --region us-east-1 | \
sudo docker login --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com
sudo docker pull 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
sudo docker run -d --name the_db 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
###
### Таблица auth_user не существует.
###
sudo docker exec -it the_db /usr/bin/psql -U the_user the_database -c "выбрать количество (*) из auth_user;"
история докеров sudo 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
## Результат:
ИЗОБРАЖЕНИЕ СОЗДАНО СОЗДАНО РАЗМЕРОМ КОММЕНТАРИЙ
854dbef239c2 23 часа назад postgres 70B
4b1bd66a8d33 23 часа назад КОПИРОВАТЬ ./make_data.sh /make_data.sh 3.03kB buildkit.dockerfile.v0
<отсутствует> 23 часа назад COPY ./20-init_db.sql /docker-entrypoint-ini… 188B buildkit.dockerfile.v0
<отсутствует> 23 часа назад MAINTAINER Me 0B buildkit.dockerfile.v0
[...]
Примечание: я рассматривал возможность создания контейнера томов данных, но этот метод показался мне более простым и лучше документированным.
Другое примечание: я не могу добавить данные в Dockerfile, потому что Postgres должен быть запущен, прежде чем данные можно будет вставить.
Почему нет докер коммит
сохранить состояние моего контейнера? Почему изображение не содержит данных?