Проблемът е, че postgres Dockerfile декларира "/var/lib/postgresql/data" като том. Това е просто нормална директория, която живее извън файловата система на Union, използвана от изображения. Томовете са активни, докато не се свързват контейнери към тях и не бъдат изтрити изрично.
Имате няколко възможности за избор:
- Използвайте
--volumes-from
команда за споделяне на данни с нови контейнери. Това ще работи само ако има само едно работещо postgres изображение в даден момент, но това е най-доброто решение. - Напишете свой собствен Dockerfile, който създава данните, преди да декларирате обема. След това тези данни ще бъдат копирани в тома, когато контейнерът бъде създаден.
- Напишете входна точка или cmd скрипт, който попълва базата данни по време на изпълнение.
Всички тези предложения изискват да използвате томове за управление на данните, след като контейнерът работи. Като алтернатива можете да напишете свой собствен Dockerfile и просто да не декларирате том. След това можете да използвате docker commit
за да създадете ново изображение след добавяне на данни. Това вероятно ще работи в краткосрочен план, но определено не е начинът, по който трябва да работите с контейнери – не може да се повтори и в крайна сметка ще изчерпите слоевете във файловата система на Union.
Разгледайте официалните документи на Docker за управление на данни в контейнери за повече информация.