すべてのdockerコンテナにプロキシを使用させるにはどうすればよいですか?


18

企業プロキシの背後にあるDebian Jessieでdockerを実行しています。Dockerイメージをダウンロードできるようにするには、以下を以下に追加する必要があります/etc/defaults/docker

http_proxy="http://localhost:3128/"

これが機能することを確認できます。

ただし、コンテナー内からinterwebzにアクセスできるようにするには、すべてのセッションを開始して--net hostから、これらのenv変数をセットアップする必要があります。

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

理想的には、コンテナはホストネットワークを必要とせず、プロキシについても知りたくない(つまり、コンテナのポート20、80、443へのすべての発信呼び出しはホストのプロキシポートを経由する)。それは可能ですか?

それに失敗すると、これらのenv変数はローカルに設定されますが、イメージの一部として決してエクスポートされないことを保証するサイトをセットアップすることは可能ですか?

更新:これらのものを--env http_proxy=...etcで渡すことができることは知っていますが、それは不格好です。エイリアスを使用せずに、システム上のすべてのユーザーに対して機能するようにします。

回答:


5

このSOの回答を参照してください

ホストサーバーは、透過的なプロキシを実行できるプロキシ(この場合はsquid)を実行するコンテナを実行します。そのコンテナには、プロキシサーバーへのトラフィックをNATするiptablesルールがいくつかあります。これは、コンテナが特権モードで実行する必要があることを意味します。

ホストサーバーには、プロキシコンテナを介してポート80宛てのプロキシを除くすべてのコンテナからのすべてのトラフィックを再ルーティングするipルートテーブルエントリも含まれています(ここに魔法があります)。

その最後のビットは、本質的に、ポート80のトラフィックの場合、コンテナから他の世界へのルートがプロキシコンテナを通過することを意味し、NATおよび透過プロキシに機会を与えます。

https://github.com/silarsis/docker-proxy


これは「https」では機能しません。
セビング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.