Container bị đánh dấu unhealthy nhưng dịch vụ vẫn chạy
Triệu chứng
Phần tiêu đề “Triệu chứng”Một container — thường là frontend — hiện unhealthy trong docker ps, nhưng ứng dụng vẫn tới được và phục vụ bình thường trong trình duyệt. Probe tình trạng ghi log “connection refused” dù dịch vụ vẫn lên.
Nguyên nhân: probe nhắm tới localhost, vốn phân giải thành cả IPv6 (::1) và IPv4 (127.0.0.1). Công cụ probe thử IPv6 trước, nhưng máy chủ bên trong container chỉ lắng nghe trên IPv4 — nên lần thử IPv6 bị từ chối và probe báo cáo sai rằng container đã sập.
Xác nhận
Phần tiêu đề “Xác nhận”Kiểm tra tình trạng được báo cáo của container so với khả năng tới được thực tế của nó:
docker ps --format '{{.Names}}\t{{.Status}}' | grep aiboardNếu một container đọc là (unhealthy) nhưng ứng dụng phản hồi khi bạn truy cập trực tiếp trên IPv4, đó là âm tính giả này:
# từ bên trong container — IPv4 một cách tường minhdocker compose -f docker-compose.release.yml exec frontend \ sh -c 'wget -qO- http://127.0.0.1:8080/ >/dev/null && echo "IPv4 OK"'Nếu IPv4 OK in ra, dịch vụ khỏe mạnh và chỉ có probe là sai.
Các image hiện tại đã probe IPv4 một cách tường minh, nên một hộp khỏe mạnh sẽ không gặp điều này. Nếu bạn vẫn thấy nó trên một image cũ:
-
Xác nhận dịch vụ thực sự đang phục vụ (kiểm tra IPv4 ở trên in
IPv4 OK). Nếu có, không cần hành động ứng dụng nào — container vẫn khỏe mạnh. -
Cập nhật lên một image phát hành hiện tại, nơi health probe nhắm tới
127.0.0.1trực tiếp và âm tính giả biến mất:Terminal window docker compose -f docker-compose.release.yml up -d -
Kiểm tra lại trạng thái được xóa:
Terminal window docker ps --format '{{.Names}}\t{{.Status}}' | grep aiboard
Phòng ngừa
Phần tiêu đề “Phòng ngừa”- Probe đúng địa chỉ mà máy chủ thực sự bind. Health probe nên nhắm tới
127.0.0.1một cách tường minh khi máy chủ chỉ lắng nghe trên IPv4, để việc phân giải tên không thể gửi probe tới một địa chỉ IPv6 chưa được bind. - Phân biệt lỗi probe với lỗi dịch vụ. Trước khi phản ứng với một trạng thái
unhealthy, hãy xác nhận bằng một yêu cầu IPv4 trực tiếp. Một ứng dụng xanh sau một probe đỏ là một lỗi probe, không phải một sự cố ngừng hoạt động.
Liên quan
Phần tiêu đề “Liên quan”- Khả năng quan sát & Cảnh báo — diễn giải các tín hiệu tình trạng và trạng thái.