Cheatsheet Thực ChiếnMÃ: 001-DOCKER-DEBUG⏱️ Đọc ~2 phút

Docker Debugging & Emergency Triage: Cẩm Nang Bắt Bệnh Container Lúc Nửa Đêm

Khi một container trên môi trường Production đột ngột sập, khởi động lại liên tục hoặc không tiếp nhận kết nối mạng, việc gõ bừa các lệnh restart có thể làm mất dấu vết quan trọng...

Khổ: 1080×1350 (4:5)Tối ưu Mobile & In ấn

Docker Debugging & Emergency Triage: Cẩm Nang Bắt Bệnh Container Lúc Nửa Đêm

Khi một container trên môi trường Production đột ngột sập, khởi động lại liên tục hoặc không tiếp nhận kết nối mạng, việc gõ bừa các lệnh restart có thể làm mất dấu vết quan trọng nhất của sự cố. Dưới đây là quy trình 5 bước chẩn đoán và khắc phục sự cố Docker container thực chiến.


1. Kiểm tra trạng thái và lịch sử thoát của Container

Lệnh đầu tiên cần chạy để biết container chết vì lý do gì:

docker ps -a --format "table {{.Names}} {{.Status}} {{.Image}}  {{.Ports}}"

Giải mã các mã thoát hiểm (Exit Codes) kinh điển:

  • Exit 0: Tiến trình hoàn thành bình thường và tự thoát (thường do thiếu foreground process như CMD ["nginx", "-g", "daemon off;"]).
  • Exit 1: Lỗi do ứng dụng (Uncaught Exception trong code, syntax error, missing environment variable).
  • Exit 137 (128 + 9): Tiến trình bị Linux Kernel bắn hạ bằng SIGKILL — 99% là do dính OOM (Out Of Memory).
  • Exit 139 (128 + 11): Tiến trình bị dính SIGSEGV (Segmentation Fault) — lỗi can thiệp bộ nhớ không hợp lệ trong code C/C++/Go hoặc thư viện native.
  • Exit 143 (128 + 15): Tiến trình nhận tín hiệu SIGTERM — container bị dừng chủ động bởi Docker stop hoặc Kubernetes eviction.

2. Kiểm tra log chi tiết với timestamp và tail

# Xem 100 dòng log gần nhất kèm dấu mốc thời gian chính xác
docker logs --tail 100 -f -t <container_name>

# Xem log trong khoảng thời gian cụ thể (ví dụ 30 phút gần nhất)
docker logs --since 30m <container_name>

3. Chui vào bên trong Container để khám nghiệm (docker exec vs docker run)

Nếu container còn sống nhưng chập chờn:

docker exec -it <container_name> /bin/sh

Nếu container đã chết và không thể start lại được, hãy dùng cờ --entrypoint để ghi đè lệnh khởi động và mổ xẻ file hệ thống:

docker run --rm -it --entrypoint /bin/sh <image_name>

4. Kiểm tra tài nguyên thời gian thực (docker stats)

Để phát hiện tình trạng memory leak hoặc CPU spike làm tê liệt máy chủ:

docker stats --no-stream --format "table {{.Name}}  {{.CPUPerc}}    {{.MemUsage}}   {{.MemPerc}}    {{.NetIO}}  {{.BlockIO}}"

5. Chẩn đoán mạng Container (Docker Networking Triage)

Khi container chạy nhưng không thể kết nối tới Database hoặc bên ngoài:

# Kiểm tra container đang cắm vào card mạng nào và IP là gì
docker inspect -f '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}: {{$v.IPAddress}}{{end}}' <container_name>

# Kiểm tra phân giải DNS nội bộ giữa các container
docker exec -it <container_name> ping -c 2 <db_container_name>

💡 Mẹo lưu trữ & sử dụng trong đội ngũ

Bạn có thể tải bản PDF vector về lưu trữ trong kho tài liệu nội bộ của team (Notion, Confluence) hoặc in khổ A4 dán tại bàn làm việc để tra cứu nhanh khi gặp sự cố lúc nửa đêm.

🎬 VIDEO REEL THỰC CHIẾN LIÊN QUAN (TÓM TẮT 60S)

Video Bóc Tách: Docker vs Kubernetes: Phân Biệt Container Engine và Orchestrator Thực Chiến

Xem video mô phỏng động trực quan đi kèm với cheatsheet này để hiểu sâu sắc cơ chế hoạt động chỉ trong 60 giây.