Menurut dokumentasi resmi:
Hanya ada satu
CMD
instruksi dalam Dockerfile . Jika Anda mencantumkan lebih dari satuCMD
maka hanyaCMD
terakhir akan berlaku.
Dan Dockerfile Anda memiliki dua perintah CMD jadi perintah php-fpm
akan menimpa
/usr/bin/supervisord
Sehingga Anda dapat menjalankan perintah PHP tetapi tidak dapat menemukan soket pengawas yang dibuat di wadah.
Anda dapat memperbaiki masalah Anda dengan menghapus CMD
terakhir perintah yang terkait dengan PHP-FPM
karena Anda telah mengonfigurasi supervisor untuk memulainya dan Dockerfile Anda harus memiliki satu CMD
perintah:
CMD ["/usr/bin/supervisord"]
Idenya di sini adalah untuk menghilangkan pengawas dan sebagai gantinya menjalankan apa pun yang biasa dijalankan pengawas di beberapa wadah berbeda. Anda dapat dengan mudah mengatur ini dengan docker-compose
, misalnya, semua menjalankan penampung yang sama dengan CMD
yang berbeda menimpa, atau penampung yang sama dengan CMD
yang berbeda lapisan di ujung untuk membaginya. Masalahnya di sini adalah pengawas tidak akan dapat mengomunikasikan status proses yang dikelolanya ke Docker. Itu akan selalu "hidup" bahkan jika semua prosesnya benar-benar dibuang. Mengeksposnya secara langsung berarti Anda dapat melihatnya mogok.
Yang terbaik adalah memecah masing-masing layanan ini ke dalam wadah terpisah. Karena ada yang resmi dibuat sebelumnya untuk MySQL dan seterusnya, tidak ada alasan untuk membuatnya sendiri. Yang ingin Anda lakukan adalah menerjemahkan supervisord
itu konfigurasi ke docker-compose
format.
Dengan wadah terpisah, Anda dapat melakukan hal-hal seperti docker ps
untuk melihat apakah layanan Anda berjalan dengan benar, semuanya akan dicantumkan satu per satu. Jika Anda perlu memutakhirkan satu, maka Anda dapat melakukannya dengan mudah, Anda hanya bekerja dengan satu penampung itu, daripada harus menarik semuanya.
Cara Anda menyerangnya di sini adalah memperlakukan Docker seperti VM mewah, padahal sebenarnya tidak. Apa itu adalah manajer proses , di mana proses ini kebetulan memiliki image disk bawaan dan lapisan keamanan di sekelilingnya.
Susun lingkungan Anda dari wadah proses tunggal dan hidup Anda akan jauh lebih mudah baik dari perspektif pemeliharaan maupun pemantauan.
Jika Anda dapat menyatakan konfigurasi ini sebagai sesuatu docker-compose
dapat menangani maka Anda selangkah lebih dekat untuk pindah ke lapisan manajemen yang lebih canggih seperti Kubernetes yang mungkin merupakan kesimpulan logis dari migrasi khusus ini.