Rumah >Operasi dan penyelenggaraan >Docker >Bekas buruh pelabuhan tidak boleh dibunuh
Bekas docker telah menjadi cara standard untuk menggunakan aplikasi moden, terutamanya untuk perusahaan yang menggunakan seni bina perkhidmatan mikro. Walau bagaimanapun, dalam penggunaan sebenar, kita mungkin menghadapi beberapa masalah, seperti bekas tidak boleh dibunuh, dsb. Artikel ini akan memperkenalkan beberapa sebab mengapa bekas tidak boleh dibunuh dan cara menyelesaikan masalah ini.
Di dalam bekas Docker, setiap bekas mempunyai CPU, memori dan sumber lain sendiri Apabila sumber digunakan secara berlebihan, sistem mungkin tidak mampu memberi respons tepat pada masanya kepada arahan bunuh. Pada masa ini, anda perlu mematikan proses kontena secara manual, atau menggunakan perintah bunuh dengan parameter -f untuk memaksa berhenti.
Walau bagaimanapun, jika anda tidak mahu mematikan proses bekas secara manual semasa bekas sedang berjalan, terdapat alatan yang boleh membantu anda menghentikan bekas secara automatik. Contohnya menggunakan Perkhidmatan Kontena AWS EC2 atau Kubernetes, alatan ini boleh memantau penggunaan sumber kontena secara automatik dan menghentikan bekas apabila sumber digunakan secara berlebihan.
Apabila fail dikongsi antara bekas dan hos, bekas itu memasang fail pada hos Apabila diapit, bekas itu tidak boleh mati. Ini kerana apabila bekas keluar, sistem pengendalian mungkin perlu menunggu operasi I/O sistem fail selesai sebelum menamatkan aplikasi, jika tidak, kerosakan sistem fail mungkin berlaku.
Untuk menyelesaikan masalah ini, kami perlu memastikan bahawa bekas tidak mempunyai sebarang fail yang dibuka untuk ditulis dalam folder kongsi yang dipasang Anda boleh menggunakan perintah lsof untuk melihat fail yang terbuka dalam bekas, dan kemudian tutup fail ini secara manual. Di samping itu, apabila bekas keluar, kami boleh membiarkan hos menyahlekap folder yang dipasang supaya sistem pengendalian tidak menunggu operasi I/O.
Kadangkala kami mungkin menggunakan docker stop command untuk menghentikan proses kontena. Walau bagaimanapun, apabila bekas tidak boleh dihentikan seperti biasa, arahan henti dok boleh menyebabkan masalah Pada masa ini, kita perlu menggunakan perintah bunuh dok untuk menghentikan kontena secara paksa. Kerana arahan bunuh docker boleh menghentikan proses kontena secara paksa tanpa menunggu proses dibersihkan.
Sebelum menggunakan arahan docker kill, kita perlu memastikan bahawa tiada aplikasi yang sedang berjalan dalam bekas, jika tidak, ia boleh menyebabkan masalah seperti kehilangan data atau kebocoran memori.
Aplikasi dalam bekas Docker boleh mencipta subproses mereka sendiri dan subproses ini boleh menghalang proses kontena daripada dimatikan. Kerana apabila proses induk keluar, proses anak mungkin menjadi "proses yatim", dan sistem pengendalian boleh memindahkan proses yatim ke proses init dan terus berjalan Dalam kes ini, bekas tidak boleh dimatikan.
Terdapat dua cara untuk menyelesaikan masalah ini: satu ialah menyediakan mekanisme pemprosesan isyarat semasa menjalankan aplikasi dalam bekas Apabila proses kontena menerima isyarat bunuh, ia menghantar isyarat kepada proses anak biarkan proses anak juga keluar Dengan cara ini Ini membolehkan proses kontena keluar dengan lancar; yang kedua ialah menggunakan perintah bunuh buruh untuk membunuh secara paksa proses kontena, supaya proses anak juga akan ditamatkan.
Aplikasi dalam bekas mungkin menggunakan berbilang benang dan benang ini mungkin menghalang bekas daripada mati. Kerana apabila proses kontena tamat, benang mungkin terus berjalan, menyebabkan proses kontena tidak dapat keluar.
Untuk menyelesaikan masalah ini, kita perlu menyemak semua benang dalam bekas untuk memastikan bahawa benang telah keluar. Anda boleh menggunakan arahan strace atau perintah lsmod untuk menyenaraikan semua benang dalam bekas dan kemudian menghentikan benang ini secara manual.
Ringkasan
Apabila menggunakan bekas Docker, tidak dapat membunuh bekas adalah masalah biasa. Artikel ini memperkenalkan beberapa sebab mengapa bekas tidak boleh dibunuh dan cara menyelesaikan masalah ini. Saya harap penyelesaian ini dapat membantu dan menghalang anda daripada menghadapi masalah yang sama apabila menggunakan bekas Docker.
Atas ialah kandungan terperinci Bekas buruh pelabuhan tidak boleh dibunuh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!