Problém je v tom, že postgres Dockerfile deklaruje "/var/lib/postgresql/data" jako svazek. Toto je jen normální adresář, který žije mimo souborový systém Unie používaný obrázky. Svazky jsou aktivní, dokud na ně nebudou odkazovat žádné kontejnery a nebudou explicitně smazány.
Máte několik možností:
- Použijte
--volumes-from
příkaz pro sdílení dat s novými kontejnery. To bude fungovat pouze v případě, že je současně spuštěn pouze jeden postgresový obraz, ale je to nejlepší řešení. - Napište si svůj vlastní soubor Dockerfile, který vytvoří data před deklarováním svazku. Tato data budou poté zkopírována do svazku při vytvoření kontejneru.
- Napište vstupní bod nebo skript cmd, který naplní databázi za běhu.
Všechny tyto návrhy vyžadují, abyste po spuštění kontejneru používali ke správě dat svazky. Případně můžete napsat svůj vlastní Dockerfile a jednoduše nedeklarovat svazek. Poté můžete použít docker commit
pro vytvoření nového obrázku po přidání dat. To bude pravděpodobně fungovat v krátkodobém horizontu, ale rozhodně to není způsob, jakým byste měli pracovat s kontejnery – není to opakovatelné a nakonec vám dojdou vrstvy v systému souborů Union.
Další informace naleznete v oficiálních dokumentech Docker o správě dat v kontejnerech.