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ルール
- すべてのLinux CLIツールと各言語ランタイムが認識できるよう、大文字(
HTTP_PROXY、HTTPS_PROXY、NO_PROXY)と小文字(http_proxy、https_proxy、no_proxy)の両方を設定する - コンテナ間通信がローカルブリッジネットワーク内に留まるよう、内部Docker Composeサービス名(例:
NO_PROXY=localhost,127.0.0.1,redis,postgres)を必ず指定する - 公開イメージの
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)を追加して、内部ブリッジホストのプロキシをバイパスしてください。
1台の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用プロキシを購入