Cách cấu hình Proxy cho Docker và container cần phân biệt ba phạm vi: Docker daemon tải image, quá trình build cài dependency và ứng dụng chạy trong container. Cấu hình đúng phạm vi giúp tránh đưa thông tin đăng nhập vào image hoặc repository.
Mục lục
- Ba lớp cấu hình cần phân biệt
- Biến môi trường chuẩn
- Không đưa bí mật vào image
- Cấu hình NO_PROXY hợp lý
- Quy trình kiểm tra
- Lỗi thường gặp
- Vận hành production
Ba lớp cấu hình cần phân biệt
- Daemon dùng Proxy để truy cập registry.
- Build dùng Proxy khi tải package trong Dockerfile.
- Container runtime dùng Proxy cho ứng dụng đang chạy.
- Docker client có thể có cấu hình riêng trên máy phát triển.
Biến môi trường chuẩn
Nhiều công cụ đọc HTTP_PROXY, HTTPS_PROXY và NO_PROXY, đồng thời có biến chữ thường tương ứng. Giá trị thường là URL Proxy. Hãy kiểm tra tài liệu của từng ứng dụng vì không phải thư viện nào cũng xử lý giống nhau.
NO_PROXY chứa localhost, địa chỉ nội bộ và miền không nên qua Proxy. Danh sách quá rộng có thể tạo đường thoát ngoài dự kiến.
Không đưa bí mật vào image
ARG và ENV trong Dockerfile có thể xuất hiện trong lịch sử build hoặc image. Không ghi URL chứa username/password vào Dockerfile đã commit. Ưu tiên secret mount của BuildKit, biến môi trường được cấp lúc chạy hoặc trình quản lý bí mật.
Xem thêm bảo mật tài khoản và mật khẩu Proxy trong mã nguồn.
Cấu hình NO_PROXY hợp lý
- localhost và 127.0.0.1 khi phù hợp.
- Tên service nội bộ trong cùng mạng container.
- Registry hoặc kho nội bộ theo chính sách.
- Dải IP riêng cần truy cập trực tiếp.
- Không dùng ký tự đại diện rộng nếu chưa kiểm thử.
Quy trình kiểm tra
- Kiểm tra daemon có thể tải một image nhỏ.
- Build image thử nghiệm mà không in bí mật vào log.
- Chạy container và kiểm tra IP thoát.
- Xác nhận service nội bộ đi đúng theo NO_PROXY.
- Tắt Proxy và kiểm tra thông báo lỗi có thể chẩn đoán.
Lỗi thường gặp
- Daemon có Proxy nhưng build không có, hoặc ngược lại.
- Biến môi trường viết sai chữ hoa/chữ thường cho ứng dụng cụ thể.
- NO_PROXY thiếu tên service hoặc port.
- Chứng chỉ doanh nghiệp chưa được container tin cậy.
- Mật khẩu có ký tự đặc biệt chưa được mã hóa URL đúng cách.
Vận hành production
Tách bí mật giữa development, staging và production. Giới hạn quyền truy cập, xoay mật khẩu, che log và theo dõi tỷ lệ lỗi. Không tắt TLS verification để sửa nhanh lỗi chứng chỉ; hãy cài CA được quản trị tin cậy nếu môi trường doanh nghiệp yêu cầu.
Câu hỏi thường gặp
Cấu hình Proxy trên host có tự áp dụng cho container?
Không luôn. Daemon, build và runtime có phạm vi khác nhau; cần cấu hình đúng lớp.
Có nên dùng ENV trong Dockerfile cho mật khẩu?
Không. Bí mật có thể tồn tại trong image và lịch sử. Hãy cấp bí mật tại build hoặc runtime bằng cơ chế phù hợp.
NO_PROXY dùng để làm gì?
Chỉ định các host hoặc miền kết nối trực tiếp, không qua Proxy.
Kết luận
Cấu hình Proxy cho Docker theo đúng lớp, bảo vệ bí mật khỏi image và log, đồng thời kiểm thử NO_PROXY với service nội bộ. Production cần quản lý bí mật và chứng chỉ có kiểm soát.
Bạn cần cấu hình Proxy phù hợp? Hãy xem các gói tại ProxySmart hoặc liên hệ hỗ trợ để được tư vấn theo vị trí IP, giao thức, băng thông và số phiên đồng thời. Chỉ sử dụng proxy cho mục đích hợp pháp, trên hệ thống bạn sở hữu hoặc được phép kiểm thử, đồng thời tuân thủ điều khoản của dịch vụ đích.