私は企業のプロキシの背後にある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
ホスト サーバーは、透過プロキシを実行できるプロキシ (この場合は squid) を実行するコンテナーを実行します。そのコンテナーには、トラフィックをプロキシ サーバーに NAT するいくつかの iptables ルールがあります。つまり、コンテナーは特権モードで実行する必要があります。
ホスト サーバーには、プロキシ以外のコンテナーからのすべてのトラフィックを、ポート 80 宛てにプロキシ コンテナー経由で再ルーティングする IP ルート テーブル エントリも含まれています (これが魔法です)。
最後の部分は基本的に、ポート 80 のトラフィックの場合、コンテナーから世界の残りの部分へのルートがプロキシ コンテナーを通過することを意味し、NAT と透過プロキシの機会が与えられます。
答え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
動作するようになりました。