Problem polega na tym, że postgres Dockerfile deklaruje "/var/lib/postgresql/data" jako wolumin. Jest to zwykły katalog, który znajduje się poza systemem plików Union używanym przez obrazy. Woluminy żyją, dopóki żadne kontenery nie będą się z nimi łączyć i zostaną wyraźnie usunięte.
Masz kilka możliwości:
- Użyj
--volumes-from
polecenie do udostępniania danych nowym kontenerom. To zadziała tylko wtedy, gdy w danym momencie jest tylko jeden uruchomiony obraz postgres, ale jest to najlepsze rozwiązanie. - Napisz własny plik Dockerfile, który tworzy dane przed zadeklarowaniem woluminu. Te dane zostaną następnie skopiowane do woluminu po utworzeniu kontenera.
- Napisz punkt wejścia lub skrypt cmd, który zapełni bazę danych w czasie wykonywania.
Wszystkie te sugestie wymagają użycia woluminów do zarządzania danymi po uruchomieniu kontenera. Alternatywnie możesz napisać własny plik Dockerfile i po prostu nie deklarować woluminu. Możesz wtedy użyć docker commit
aby utworzyć nowy obraz po dodaniu danych. To prawdopodobnie zadziała w krótkim okresie, ale zdecydowanie nie tak powinieneś pracować z kontenerami - nie jest to powtarzalne i ostatecznie zabraknie Ci warstw w Union File System.
Aby uzyskać więcej informacji, zapoznaj się z oficjalnymi dokumentami Dockera dotyczącymi zarządzania danymi w kontenerach.