Cách cấu hình proxy HTTP(S) cho Docker Container và Docker Compose
Cập nhật:
Khi triển khai nhiều worker thu thập dữ liệu, bot tự động hóa hoặc node Web3 bằng Docker trên cùng một máy chủ VPS, bạn có thể gắn cố định cho mỗi Container một địa chỉ IP tĩnh riêng biệt từ VinaProxy thông qua các biến môi trường HTTP_PROXY và HTTPS_PROXY trong docker-compose.yml mà không làm thay đổi mạng gốc của máy chủ host.
ENV HTTP_PROXY=http://user:pass@ip:port HTTPS_PROXY=http://user:pass@ip:port- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
Phân biệt 3 tầng cấu hình proxy trong hệ sinh thái Docker
Docker có 3 vị trí nhận cấu hình proxy với phạm vi tác động hoàn toàn khác nhau—hãy chọn đúng tầng bạn cần:
| Tầng cấu hình Docker | Nơi khai báo | Phạm vi tác động |
|---|---|---|
| 1. Runtime Container (Phổ biến nhất) | docker run -e HTTP_PROXY=... hoặc environment: trong docker-compose.yml | Chỉ định tuyến ứng dụng chạy bên trong từng Container riêng lẻ |
| 2. Quá trình Build Image | docker build --build-arg HTTP_PROXY=http://user:pass@ip:port . | Giúp các lệnh apt-get, pip, npm tải gói qua proxy lúc build |
3. Docker Daemon (dockerd) | /etc/systemd/system/docker.service.d/http-proxy.conf | Dùng khi máy chủ cần tải image từ Docker Hub (docker pull) qua proxy |
Khai báo chuẩn trong docker-compose.yml và quy tắc NO_PROXY
- Khai báo đồng thời cả chữ hoa (
HTTP_PROXY,HTTPS_PROXY,NO_PROXY) lẫn chữ thường (http_proxy,https_proxy,no_proxy) vì một số thư viện C/Go/Python chỉ đọc chữ thường - Luôn liệt kê tên các service nội bộ (như
redis,postgres,mongodb,localhost,127.0.0.1) vào biếnNO_PROXYđể các container trong cùng mạng Docker bridge gọi nhau trực tiếp không đi vòng ra proxy ngoài - Không ghi cứng (
ENV HTTP_PROXY=...) thông tin mật khẩu proxy vào trongDockerfilecông khai—hãy truyền lúc chạy qua file.envhoặcdocker-compose.yml
Các bước thực hiện
- 1
Chuẩn bị chuỗi URL http://user:pass@ip:port
Chuyển dòng
ip:port:user:passcủa VinaProxy sang dạnghttp://user:pass@ip:portbằng công cụ đổi định dạng. - 2
Khai báo biến môi trường trong docker-compose.yml
Trong mục
environment:của từng service, thêmHTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxyvàNO_PROXY=localhost,127.0.0.1,redis,db. - 3
Khởi chạy lại Container
Chạy
docker compose up -dđể áp dụng biến môi trường mới cho từng container. - 4
Kiểm tra IP bên trong Container
Chạy
docker exec -it <container_name> curl -s https://vinaproxy.com/api/my-ipđể xác nhận container đã đi ra bằng IP của proxy.
Câu hỏi thường gặp
Tại sao container của tôi không kết nối được tới container Redis/Postgres sau khi thêm HTTP_PROXY?
Do thiếu biến NO_PROXY! Khi không có NO_PROXY, ứng dụng cố gắng gửi kết nối tới hostname redis:6379 hoặc postgres:5432 ra máy chủ proxy bên ngoài. Hãy thêm NO_PROXY=localhost,127.0.0.1,redis,postgres vào environment:.
Tôi có thể chạy 20 container trên 1 VPS, mỗi container gắn 1 proxy VinaProxy khác nhau không?
Hoàn toàn được và đây là kiến trúc chuẩn. Mỗi service hoặc replica nhận một biến HTTP_PROXY=http://user:pass@ip_N:port riêng từ file .env.
Tại sao phải khai báo cả chữ hoa `HTTP_PROXY` và chữ thường `http_proxy`?
Trong môi trường Linux container, curl và một số công cụ ưu tiên biến chữ thường http_proxy / https_proxy, trong khi Go và Node tools thường đọc HTTP_PROXY / HTTPS_PROXY.
Cấp IP tĩnh riêng cho từng Docker Container trên VPS của bạn
Proxy IPv4 riêng & Static ISP không giới hạn băng thông tại 7 quốc gia.
Mua Proxy cho Docker