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.
- Penggunaan sumber kontena yang berlebihan
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.
- Masalah yang disebabkan oleh titik lekap antara bekas dan hos
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.
- Gunakan arahan docker stop dan bukannya docker kill command
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.
- Subproses dalam bekas
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.
- Benang dalam bekas
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Docker adalah kemahiran yang mesti ada untuk jurutera DevOps. 1.Docker adalah platform kontena sumber terbuka yang mencapai pengasingan dan mudah alih dengan aplikasi pembungkusan dan kebergantungan mereka ke dalam bekas. 2. Docker bekerja dengan ruang nama, kumpulan kawalan dan sistem fail bersekutu. 3. Penggunaan asas termasuk mencipta, menjalankan dan menguruskan bekas. 4. Penggunaan lanjutan termasuk menggunakan DockerCompose untuk menguruskan aplikasi multi-kontainer. 5. Kesilapan umum termasuk kegagalan kontena, masalah pemetaan pelabuhan, dan masalah ketekunan data. Kemahiran penyahpepijatan termasuk log melihat, memasukkan bekas, dan melihat maklumat terperinci. 6. Pengoptimuman prestasi dan amalan terbaik termasuk pengoptimuman imej, kekangan sumber, pengoptimuman rangkaian dan amalan terbaik untuk menggunakan Dockerfile.

Dockervolumes memastikan data tetap selamat apabila bekas dimulakan semula, dipadam, atau berhijrah. 1. Buat Jilid: DockervolumecreatemyData. 2. Jalankan bekas dan gunung: dockerrun-it-vmydata:/app/dataubuntubash. 3. Penggunaan lanjutan termasuk perkongsian data dan sandaran.

Langkah -langkah untuk mengemas kini imej Docker adalah seperti berikut: Tarik tag imej terkini imej baru memadam imej lama untuk tag tertentu (pilihan) mulakan semula bekas (jika diperlukan)

Empat cara untuk keluar dari Docker Container: Gunakan Ctrl D di terminal kontena masukkan perintah keluar di terminal kontena Gunakan Docker Stop & lt; container_name & gt; Perintah Gunakan Docker Kill & lt; container_name & gt; Perintah di terminal tuan rumah (keluar kuasa)

Kaedah untuk menyalin fail ke tuan rumah luaran di Docker: Gunakan arahan CP Docker: Jalankan Docker CP [Options] & lt; Container Path & GT; & lt; PATH HOST & GT;. Menggunakan jumlah data: Buat direktori pada tuan rumah, dan gunakan parameter -V parameter untuk memasang direktori ke dalam bekas apabila membuat bekas untuk mencapai penyegerakan fail bidirectional.

Cara memulakan semula bekas Docker: Dapatkan ID Container (Docker PS); Hentikan bekas (Docker Stop & lt; container_id & gt;); Mulakan bekas (Docker Start & lt; container_id & gt;); Sahkan bahawa permulaan semula berjaya (Docker PS). Kaedah lain: Docker mengarang (Docker-Compose Restart) atau Docker API (lihat Dokumentasi Docker).

Kaedah Peningkatan Keselamatan Docker termasuk: 1. Gunakan parameter-cap-drop untuk menghadkan keupayaan Linux, 2. Buat bekas baca sahaja, 3 set tag Selinux. Strategi ini melindungi bekas dengan mengurangkan pendedahan kelemahan dan mengehadkan keupayaan penyerang.

Anda boleh menanyakan nama kontena Docker dengan mengikuti langkah -langkah: Senaraikan semua bekas (Docker PS). Tapis senarai kontena (menggunakan arahan grep). Mendapat nama kontena (terletak di lajur "Nama").
