如何在 Docker 中設定代理(容器、Compose 與映像檔建置)
更新於:
在單一主機伺服器上執行多容器爬蟲、自動化工作節點或 DePIN 節點時,為每個容器傳入 HTTP_PROXY 與 HTTPS_PROXY 環境變數,可讓每個服務透過來自 VinaProxy 的專屬獨立靜態 IPv4 位址出站,而無需變更主機的路由表。
ENV HTTP_PROXY=http://user:pass@ip:port HTTPS_PROXY=http://user:pass@ip:port- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
理解 Docker 的 3 個代理配置範圍
Docker 將容器執行階段流量、映像檔建置流量以及精靈註冊庫拉取流量嚴格劃分:
| Docker 作用範圍 | 配置位置 | 路由流量項目 |
|---|---|---|
| 1. 容器執行階段(最常用) | docker run -e HTTP_PROXY=... 或 Compose environment: | 該特定容器內部應用程式產生的所有網路流量 |
2. 映像檔建置 (docker build) | --build-arg HTTP_PROXY=http://user:pass@ip:port | 建置期間套件管理工具(apt、pip、npm)的下載請求 |
3. Docker 精靈 (dockerd) | /etc/systemd/system/docker.service.d/http-proxy.conf | docker pull 與 docker push 存取註冊庫的請求 |
Docker Compose 最佳實踐與 NO_PROXY 規則
- 同時設定大寫(
HTTP_PROXY,HTTPS_PROXY,NO_PROXY)與小寫(http_proxy,https_proxy,no_proxy)變數,確保所有 Linux CLI 工具與語言執行環境都能正常讀取 - 務必在
NO_PROXY中列出內部 Docker Compose 服務名稱(如NO_PROXY=localhost,127.0.0.1,redis,postgres),使容器間通訊保留在本地 bridge 橋接網路上 - 切勿在公開映像檔的
Dockerfile中使用ENV硬編碼代理密碼——請在執行時透過.env或docker-compose.yml注入
操作步驟
- 1
將代理格式化為 http://user:pass@ip:port
使用我們的代理格式轉換工具將 VinaProxy 的
ip:port:user:pass字串轉換為標準 URL 格式。 - 2
將環境變數新增至 docker-compose.yml
在服務的
environment:區塊下,定義HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy以及NO_PROXY=localhost,127.0.0.1,redis,db。 - 3
啟動或重新建立容器
執行
docker compose up -d套用最新的環境變數。 - 4
在容器內部驗證出口 IP
執行
docker exec -it <container> curl -s https://vinaproxy.com/api/my-ip確認容器流量已透過代理 IP 出站。
常見問題
為什麼設定 HTTP_PROXY 後容器無法連線到 Redis 或 Postgres 容器?
如果沒有設定 NO_PROXY,HTTP 用戶端會嘗試透過外部代理連線到內部服務名稱(例如 redis 或 db)。請新增 NO_PROXY=localhost,127.0.0.1,redis,db(以及小寫 no_proxy)以繞過代理,直接連線內部橋接主機。
我可以在一台 VPS 上的 20 個容器中分別指定 20 個不同的代理嗎?
完全可以。為每個容器服務(或透過獨立的 .env 變數)設定專屬的 http://user:pass@ip:port 字串即可。
為什麼需要同時設定大寫與小寫的代理環境變數?
部分 Linux 函式庫(例如 libcurl)會優先檢查小寫 http_proxy / https_proxy,而 Go 與 Node 工具通常讀取大寫 HTTP_PROXY / HTTPS_PROXY。
為每個 Docker 容器分配專屬靜態 IP
提供橫跨 7 個國家的無流量限制專用 IPv4 與靜態 ISP 代理。
購買 Docker 代理