Bài "Docker is weird" đang hot trên Hacker News làm mình nhớ lại một chuyện cũ. Team mình từng mất gần một tuần để tìm hiểu vì sao mỗi lần deploy, request lại bị lỗi 502 lẻ tẻ, còn docker compose down thì lần nào cũng "đứng hình" đúng 10 giây. Hóa ra lỗi không nằm ở code business mà ở một chi tiết rất nhỏ: process của app đang chạy với PID 1 trong container và không hề nhận được signal tắt . Bài này mình giải thích vì sao chuyện đó xảy ra, cách kiểm tra trong 30 giây và cách fix đúng cho cả Dockerfile lẫn code ứng dụng.
docker stop thực sự làm gì?
Khi bạn chạy docker stop (hoặc docker compose down , hay Kubernetes xóa một Pod), quy trình diễn ra như sau:
Docker gửi SIGTERM (hoặc signal khai báo trong STOPSIGNAL ) tới PID 1 của container.
Docker chờ hết grace period, mặc định là 10 giây .
Nếu container vẫn còn chạy, Docker gửi SIGKILL .…