Masalahnya adalah postgres Dockerfile mendeklarasikan "/var/lib/postgresql/data" sebagai volume. Ini adalah direktori biasa yang hidup di luar Sistem File Union yang digunakan oleh gambar. Volume akan aktif sampai tidak ada penampung yang tertaut ke sana dan secara eksplisit dihapus.
Anda memiliki beberapa pilihan:
- Gunakan
--volumes-from
perintah untuk berbagi data dengan wadah baru. Ini hanya akan berfungsi jika hanya ada satu gambar postgres yang berjalan pada satu waktu, tetapi ini adalah solusi terbaik. - Tulis file Docker Anda sendiri yang membuat data sebelum mendeklarasikan volume. Data ini kemudian akan disalin ke volume saat wadah dibuat.
- Tulis entri point atau skrip cmd yang mengisi database pada saat dijalankan.
Semua saran ini mengharuskan Anda menggunakan Volume untuk mengelola data setelah penampung berjalan. Atau, Anda dapat menulis Dockerfile Anda sendiri dan tidak mendeklarasikan volume. Anda kemudian dapat menggunakan docker commit
untuk membuat gambar baru setelah menambahkan data. Ini mungkin akan berhasil dalam jangka pendek, tetapi jelas bukan cara Anda bekerja dengan container - ini tidak dapat diulang dan pada akhirnya Anda akan kehabisan lapisan di Union File System.
Lihat dokumen resmi Docker tentang mengelola data dalam container untuk info selengkapnya.