Il problema è che il Dockerfile di postgres dichiara "/var/lib/postgresql/data" come volume. Questa è solo una normale directory che vive al di fuori dell'Union File System utilizzato dalle immagini. I volumi sono attivi fino a quando nessun contenitore si collega ad essi e vengono eliminati esplicitamente.
Hai alcune scelte:
- Usa il
--volumes-from
comando per condividere i dati con nuovi contenitori. Funzionerà solo se c'è solo un'immagine postgres in esecuzione alla volta, ma è la soluzione migliore. - Scrivi il tuo Dockerfile che crea i dati prima di dichiarare il volume. Questi dati verranno quindi copiati nel volume al momento della creazione del contenitore.
- Scrivere un punto di ingresso o uno script cmd che popola il database in fase di esecuzione.
Tutti questi suggerimenti richiedono l'utilizzo di volumi per gestire i dati una volta che il contenitore è in esecuzione. In alternativa, puoi scrivere il tuo Dockerfile e semplicemente non dichiarare un volume. Puoi quindi utilizzare docker commit
per creare una nuova immagine dopo aver aggiunto i dati. Probabilmente funzionerà a breve termine, ma non è sicuramente il modo in cui dovresti lavorare con i contenitori:non è ripetibile e alla fine finirai per esaurire i livelli nell'Union File System.
Per ulteriori informazioni, dai un'occhiata ai documenti Docker ufficiali sulla gestione dei dati nei container.