Playbook debug: DNS, port, TCP
Tìm đúng lớp lỗi trước khi sửa image hay firewall.
Nắm bản chất
Khi API không gọi được database, kiểm tra theo thứ tự: hostname có phân giải không, DB container có Ready không, tiến trình có listen đúng port/interface không, network có chia sẻ không, rồi mới xem firewall và authentication.
Connection refused thường nghĩa là có phản hồi từ network stack
rằng không có listener hoặc có reject. Timeout có thể liên quan
routing, firewall hoặc service quá tải.
Name or service not known gợi ý DNS hoặc sai tên.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
docker compose ps
docker compose logs --tail=100 db
docker compose exec api getent hosts db
docker compose exec api sh -c 'cat /etc/resolv.conf'
docker network inspect PROJECT_default
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Cố tình đổi DB hostname sang tên không tồn tại, rồi quan sát sự khác biệt giữa lỗi DNS và lỗi authentication. Ghi lại thông điệp error cụ thể.
Lỗi dễ mắc
Không mở port database ra public interface để “khắc phục DNS”. Hướng xử lý đó vừa sai lớp lỗi vừa tăng attack surface.
Tự kiểm tra
Nên kiểm tra gì đầu tiên khi thông báo `Name or service not known`?Xem đáp án ↗
Tên service và DNS resolution trong network/container đang thực hiện request.
Học thêm qua lab
Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.
→ Mở bảng lệnh tra cứu nhanhĐối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗