Saya sarankan untuk menambahkan skrip titik masuk ke wadah Anda; dalam skrip titik masuk ini, Anda dapat memeriksa apakah database telah diinisialisasi, dan jika belum, lakukan langkah-langkah yang diperlukan.
Seperti yang Anda perhatikan dalam pertanyaan Anda, urutan dimulainya layanan/wadah tidak boleh diterima begitu saja, jadi mungkin wadah aplikasi Anda dimulai sebelum wadah basis data, jadi skrip harus memperhitungkannya.
Sebagai contoh, lihat gambar resmi WordPress, yang melakukan inisialisasi basis data satu kali di skrip titik masuknya. Script mencoba untuk menyambung ke database (dan mencoba lagi jika database tidak dapat dihubungi (belum)), dan memeriksa apakah inisialisasi diperlukan; https://github.com /docker-library/wordpress/blob/df190dc9c5752fd09317d836bd2bdcd09ee379a5/Apache/docker-entrypoint.sh#L146-L171
CATATAN
Saya perhatikan Anda membuat "wadah khusus data" untuk melampirkan volume Anda. Sejak buruh pelabuhan 1.9, buruh pelabuhan memiliki manajemen volume, termasuk penamaan volume. Karena itu, Anda tidak perlu lagi menggunakan penampung "hanya data".
Anda dapat menghapus penampung data saja dari file penulisan Anda, dan mengubah layanan mongo Anda agar terlihat seperti ini;
mongo:
image: mongo:latest
volumes:
- mongodata:/data/db
ports:
- "28001:27017"
command: --smallfiles --rest --auth
Ini akan membuat volume baru, bernama mongodata
jika tidak ada, atau gunakan kembali volume yang ada dengan nama itu. Anda dapat membuat daftar semua volume menggunakan docker volume ls
dan hapus volume dengan docker volume rm <some-volume>
jika Anda tidak membutuhkannya lagi