Chạy một proxy và một máy chủ DNS trên cùng một máy Docker không kết nối đường DNS của chúng. Ba mối quan hệ riêng biệt rất quan trọng:

  • Khả năng tiếp cận mạng. Các dự án Compose riêng biệt thường có mạng mặc định riêng. Hãy đặt dịch vụ trên một mạng chia sẻ phù hợp, hoặc trong cùng một dự án, hoặc qua mạng được chia sẻ rõ ràng giữa các dự án.
  • Phát hiện dịch vụ. DNS nhúng của một mạng Docker tùy chỉnh có thể phân giải tên container. Điều đó cho phép ứng dụng phát hiện một hàng xóm; nhưng nó không tự động chọn hàng xóm đó làm bộ phân giải DNS của mình.
  • Chọn bộ phân giải. Xác định bộ phân giải được dùng bên trong container proxy. Trường dns của Compose nhận địa chỉ máy chủ DNS. Một tên như dns.local được phân giải trong ứng dụng không làm nó thành giá trị hợp lệ cho trường đó.

Lần theo truy vấn từ container proxy đến địa chỉ bộ phân giải đã cấu hình. Xác nhận có một tuyến và một trình lắng nghe DNS tại địa chỉ đó. Việc công bố cổng 53 của máy chủ tạo ra đường truy cập phía máy chủ; nhưng không nói với container rằng hãy dùng nó. Các container chia sẻ mạng có thể giao tiếp trực tiếp thay vào đó.

Nếu cấu hình tham chiếu địa chỉ của container DNS, hãy giữ nó ổn định dưới cấu hình IPAM tương thích. Một địa chỉ được cấp động và sao chép từ container hôm qua có thể thất bại khi tạo lại. Cũng hãy kiểm tra đường thượng nguồn của bộ phân giải: chuyển các truy vấn không được trả lời trở lại chính nó tạo ra một lỗi khác với bộ phân giải không thể tiếp cận.

Cuối cùng, xác định ai phân giải đích. Một proxy HTTP phân giải tên CONNECT có thể dùng đường container này; một ứng dụng khách SOCKS phân giải cục bộ có lẽ không. Tra cứu trên máy chủ chứng minh tuyến của máy chủ, không phải của tiến trình proxy.

Bài viết liên quan