Как добавить монтирование тома к работающему контейнеру postgreSQL? - PullRequest
3 голосов
/ 10 июля 2020

У меня работает контейнер postgreSQL docker, и мне нужно добавить монтирование тома.

Я выполнил шаги из Как я могу добавить том в существующий контейнер Docker? , (запускал docker commit на контейнере, чтобы сохранить его как образ, и запускал другой контейнер на основе этого образа с установленным именованным томом). Все файлы данных из первого контейнера находятся в / var / lib / postgres / data второго контейнера.

Однако, когда я пытаюсь запросить эту вторую базу данных postgres, я не вижу никаких таблиц, которые находятся в первом контейнере. Пытался исправить это в течение нескольких дней, но безуспешно, мне что-то здесь не хватает (не закрывает ли монтирование тома существующие данные в / var / lib / postres / data)?

1 Ответ

2 голосов
/ 10 июля 2020

Commit не будет работать, поскольку в Dockerfile определен том . .

Тома полезны во многих случаях, например, для запуска хранилища базы данных. Однако, поскольку тома не являются «частью» контейнера, это делает контейнеры больше не переносимыми, что, по-видимому, прямо противоречит лозунгу «Создавайте один раз ... Запускайте где угодно ...». *docker зафиксировать контейнер данных с VOLUME

Один из вариантов, который вы можете попробовать, - это скопировать папку данных на хост из существующего контейнера, а затем запустить контейнер с путем монтирования.

docker cp my_db_cotainer:/var/lib/postgresql/data  db_data

затем запустите новый контейнер с этим путем, чтобы он содержал те же данные, что и предыдущий

docker run -d --name some-postgres -v $PWD/db_data/:/var/lib/postgresql/data postgres

то же самое для mysql

docker cp some-mysql-old:/var/lib/mysql db_backup
docker run --rm --name some-mysql-new -v $PWD/db_backup:/var/lib/mysql  -it mysql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...