Het probleem is dat de postgres Dockerfile "/var/lib/postgresql/data" als een volume declareert. Dit is een gewone map die zich buiten het Union File System bevindt dat door afbeeldingen wordt gebruikt. Volumes blijven bestaan totdat er geen containers naar zijn gelinkt en ze expliciet worden verwijderd.
Je hebt een paar keuzes:
- Gebruik de
--volumes-from
opdracht om gegevens te delen met nieuwe containers. Dit werkt alleen als er maar één postgres-image tegelijk actief is, maar het is de beste oplossing. - Schrijf uw eigen Docker-bestand dat de gegevens maakt voordat u het volume declareert. Deze gegevens worden vervolgens naar het volume gekopieerd wanneer de container wordt gemaakt.
- Schrijf een ingangspunt of cmd-script dat de database tijdens runtime vult.
Voor al deze suggesties moet u Volumes gebruiken om de gegevens te beheren zodra de container wordt uitgevoerd. Als alternatief kunt u uw eigen Dockerfile schrijven en gewoon geen volume declareren. Je zou dan docker commit
kunnen gebruiken om een nieuwe afbeelding te maken na het toevoegen van gegevens. Dit zal waarschijnlijk op korte termijn werken, maar dit is zeker niet hoe u met containers zou moeten werken - het is niet herhaalbaar en u zult uiteindelijk geen lagen meer hebben in het Union File System.
Bekijk de officiële Docker-documenten over het beheren van gegevens in containers voor meer informatie.