Bộ lệnh chẩn đoán:
- docker ps -a: xem status và exit code của container đã dừng.
- docker logs <container> (-f để follow, --tail 100): stdout/stderr của tiến trình chính — nơi đầu tiên tìm nguyên nhân crash.
- docker inspect <container>: xem State (có OOMKilled: true không), env, mount, lệnh start.
- docker exec -it <container> sh: vào shell kiểm tra khi container còn chạy (file config, kết nối mạng).
Exit code 137 = 128 + 9 → tiến trình bị SIGKILL. Hai nguyên nhân chính:
- OOMKilled: vượt memory limit (--memory, hoặc limit của K8s). Xác nhận: docker inspect → State.OOMKilled: true. Fix: tăng limit hoặc giảm memory app dùng.
- docker stop hết 10 giây chờ SIGTERM mà app không thoát → Docker gửi SIGKILL. Fix: app phải handle SIGTERM để shutdown kịp (đóng kết nối, flush).
Container thoát ngay sau start: container chỉ sống theo tiến trình PID 1 (lệnh CMD/ENTRYPOINT). Nếu lệnh chạy xong việc rồi kết thúc, hoặc daemon tự fork về background (thói quen của nginx/apache khi cấu hình mặc định), PID 1 kết thúc → container dừng dù không có lỗi. App trong container phải chạy foreground (vd nginx -g "daemon off;", node server.js trực tiếp). Exit 0 ngay = lệnh kết thúc bình thường (thường do chạy nhầm lệnh one-shot); exit khác 0 → đọc docker logs.