PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

docker postgres con i dati iniziali non è persistente sui commit

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.