Senario
Dalam persekitaran produksi, kontena Docker mungkin gagal dimulakan, keluar secara tiba-tiba, mengalami kemerosotan prestasi, atau masalah rangkaian. Panduan ini menggunakan senario tipikal: kontena mikros perkhidmatan dalam kluster Kubernetes berulang kali memasuki CrashLoopBackOff tanpa ralat jelas dalam log, memerlukan penyelesaian masalah secara sistematik.
Gejala
- Kontena keluar sejurus selepas dimulakan dengan status Exited (1) atau Exited (137)
docker logstidak menunjukkan output atau hanya mesej umumkubectl describe podmenunjukkan CrashLoopBackOffdmesghos menunjukkan OOM atau ralat kernel- Proses dalam kontena tidak responsif atau tamat masa
Diagnosis
1. Periksa Log Kontena
docker logs --tail 100 <container_id>
docker logs --since 5m <container_id>
Jika log tidak membantu, cuba lampirkan stdin/stdout:
docker attach --sig-proxy=false <container_id>
2. Periksa Keadaan Kontena dan Kod Keluar
docker inspect <container_id> --format '{{.State.ExitCode}}'
docker inspect <container_id> | jq '.[0].State'
- Kod keluar 137: SIGKILL, biasanya disebabkan oleh OOM atau
docker stop - Kod keluar 1: ralat aplikasi, periksa log aplikasi
- Kod keluar 0: keluar normal, tetapi mungkin diambil alih oleh proses init
3. Periksa Had Sumber dan OOM
docker stats --no-stream <container_id>
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.oom_control
Periksa sama ada pembilang oom_kill meningkat.
4. Periksa Sistem Fail dan Pemacu Storan
docker info | grep -i "Storage Driver"
df -h /var/lib/docker
Pemacu storan (contohnya overlay2) penuh atau kehabisan inod akan menghalang penulisan kontena.
5. Periksa Rangkaian dan DNS
docker exec <container_id> ping -c 3 google.com
docker exec <container_id> nslookup <service_name>
Jika resolusi DNS gagal dalam kontena, periksa /etc/resolv.conf atau mod rangkaian Docker.
6. Periksa Kernel dan Versi cgroup
uname -r
cat /sys/fs/cgroup/unified/
Docker 20.10+ secara lalai menggunakan cgroup v2; sesetengah aplikasi lama mungkin tidak serasi.
7. Guna docker events untuk Pemantauan Masa Nyata
docker events --filter 'container=<container_id>'
Perhatikan peristiwa kitaran hayat kontena.
Arahan
# Lihat pokok proses
docker top <container_id>
# Masuki ruang nama untuk debug
docker run --rm -it --pid=container:<container_id> --net=container:<container_id> --cap-add SYS_PTRACE nicolaka/netshoot
# Eksport sistem fail kontena
docker export <container_id> -o container.tar
# Periksa lapisan imej
docker history <image_name>
Kawalan Risiko
- Jangan sekali-kali melaksanakan
docker restartataudocker rm -fsecara langsung dalam produksi tanpa menjalankandocker pauseatau pemeriksaan kesihatan terlebih dahulu - Semasa diagnosis, gunakan arahan hanya-baca seperti
docker logsdandocker inspectuntuk mengelak mengubah keadaan kontena - Sebelum memulakan semula, buat snapshot atau jalankan
docker commituntuk menyimpan keadaan semasa - Apabila melaraskan parameter kernel, sahkan dahulu dalam persekitaran ujian
Undur
- Rekod konfigurasi kontena semasa:
docker inspect <container_id> > container_config.json - Hentikan kontena bermasalah:
docker stop <container_id> - Pulihkan versi imej sebelumnya:
docker pull <image_name>:<previous_tag> - Mulakan semula dengan parameter asal:
docker run --name <container_name> ... <image_name>:<previous_tag> - Jika diurus oleh pengaturcara, kemas kini konfigurasi dan gunakan semula:
kubectl rollout undo deployment/<deployment_name>
Pengesahan
- Sahkan status kontena berjalan:
docker ps -a | grep <container_name>, Status sepatutnya "Up" - Periksa titik akhir kesihatan aplikasi:
curl -f http://localhost:<port>/health - Pantau log untuk ralat:
docker logs --tail 50 <container_id>tidak menunjukkan timbunan pengecualian - Sahkan penggunaan sumber:
docker stats --no-stream <container_id>menunjukkan CPU/memori dalam julat yang dijangkakan - Uji sambungan rangkaian: akses kontena dari perkhidmatan lain tanpa ralat
Bila Perlu Menghantar Tiket OpsGlobal
Hubungi pakar OpsGlobal dengan segera apabila:
- Kegagalan kontena melibatkan panik kernel, kerosakan sistem fail yang tidak boleh dipulihkan, atau kegagalan perkakasan
- Arahan diagnostik melaporkan "kebenaran ditolak" atau "panggilan sistem dihadkan" dan tidak boleh ditingkatkan dengan selamat menggunakan
--privileged - Tingkah laku runtime kontena menyimpang secara ketara daripada dokumentasi rasmi, mencadangkan pepijat dalam Docker atau containerd
- Kegagalan menjejaskan berbilang nod atau keseluruhan kluster, memerlukan penyelarasan pelbagai sumber
- Selepas menghabiskan semua langkah di atas, kontena masih tidak dapat pulih dan masa henti perniagaan melebihi RTO
Semasa menghantar tiket, lampirkan: docker info, docker version, petikan syslog yang berkaitan, ID kontena bermasalah, dan output arahan diagnostik.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu DevOps dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Artikel ini merangkumi isu runtime kontena Docker biasa, alat dan arahan diagnostik, kawalan risiko, strategi undur, pengesahan, dan bila perlu menghubungi OpsGlobal untuk sokongan pakar.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.