Docker compose membolehkan anda mengurus berbilang bekas sebagai satu unit. Walau bagaimanapun, adalah sukar untuk melaksanakan perintah sekali sahaja, terutamanya apabila berurusan dengan proses yang bergantung kepada data seperti menyediakan pangkalan data.
Dalam fail karang anda, anda telah mencipta bekas volum data "mongodata" untuk menyimpan data MongoDB. Bekas ini pada asasnya ialah bekas yang dijeda yang hanya melekapkan kelantangan yang ditetapkan.
Skrip Entrypoint untuk Permulaan Satu Masa:
Untuk mengelakkan arahan "-setup" daripada melaksanakan beberapa kali, anda boleh menggunakan skrip titik masuk dalam bekas "projek_saya". Skrip ini akan menyemak sama ada pangkalan data telah dimulakan dan melakukan persediaan hanya jika perlu.
Contoh:
#!/bin/sh # Check if database is initialized if test -f /app/initialized; then # Database already initialized, skip setup echo "Database already initialized" else # Initialize database ./my-project -setup touch /app/initialized fi # Start the application exec /go/bin/my_project
Docker 1.9 dan kemudiannya menyediakan keupayaan pengurusan volum asli, menghapuskan keperluan untuk bekas "data sahaja". Anda boleh memudahkan fail karang anda seperti berikut:
services: mongo: image: mongo:latest volumes: - mongodata:/data/db ports: - "28001:27017" command: --smallfiles --rest --auth
Dalam skrip titik masuk, adalah penting untuk menangani kemungkinan kelewatan dalam ketersediaan pangkalan data. Skrip harus mencuba semula percubaan sambungan jika pangkalan data masih belum boleh diakses.
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Perintah Sekali dalam Docker Compose untuk Proses Bergantung kepada Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!