すべての Docker コンテナでプロキシを使用できるようにするにはどうすればよいでしょうか?

すべての Docker コンテナでプロキシを使用できるようにするにはどうすればよいでしょうか?

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

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

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

ただし、コンテナ内からインターネットにアクセスできるようにするには、すべてのセッションを開始して--net host、次の環境変数を設定する必要があります。

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

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

それができない場合、これらの環境変数がローカルに設定され、イメージの一部としてエクスポートされないようにするサイト設定を行うことは可能ですか?

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

答え1

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

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

ホスト サーバーには、プロキシ以外のコンテナーからのすべてのトラフィックを、ポート 80 宛てにプロキシ コンテナー経由で再ルーティングする IP ルート テーブル エントリも含まれています (これが魔法です)。

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

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

答え2

Dockerクライアントを構成する公式ドキュメントでは、この問題を簡単に解決する方法が示されています。

~/.docker/config.json(または) ファイルを編集し%USERPROFILE%\.docker\config.json、次の JSON スニペットを追加します。

{
    "proxies": {
        "default": {
            "httpProxy": "http://localhost:3128",
            "httpsProxy": "https://localhost:3128"
        }
    }
}

これにより、Debian Docker コンテナ内での実行が失敗する問題が解決しましたapt udpate。その json ファイルにプロキシ設定を追加し、新しい Docker コンテナを起動すると、apt update動作するようになりました。

関連情報