sql >> Databáze >  >> RDS >> PostgreSQL

docker postgres s počátečními daty není zachován přes potvrzení

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.



  1. Proč nemohu použít proměnné vazby v příkazech DDL/SCL v dynamickém SQL?

  2. Existuje / neexistuje:'vybrat 1' vs 'vybrat pole'

  3. DROP TABLE MySQL

  4. Použití SSH tunelování jako alternativy VPN