Docker はプロキシ サーバーの背後でイメージを取得できません

Docker はプロキシ サーバーの背後でイメージを取得できません

CentOS Linux 7でdockerバージョン20.10.14を使用しています。dockerをインストールし、/usr/lib/systemd/system/docker.serviceにプロキシ設定をセットアップしました。プロキシ設定は次のとおりです。

Environment="HTTP_PROXY=http://10.330.100.100:3128/"
Environment="HTTPS_PROXY=https://10.330.100.100:3128/"
Environment=no_proxy=localhost,127.0.0.1

次のようなエラーが表示されます

Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: tls: first record does not look like a TLS handshake

HTTPS_PROXYをhttpsからhttpに変更すると、

Error response from daemon: Get "https://registry-1.docker.io/v2/": Bad Request

そして「https://registry-1.docker.io/v2/」をcurlしようとすると、

curl: (56) Received HTTP code 400 from proxy after CONNECT

答え1

Environment="HTTP_PROXY=http://10.330.100.100:3128/"
Environment="HTTPS_PROXY=https://10.330.100.100:3128/"
                             ^                  ^^^^

ここでは、プロキシサーバーをプレーンHTTPおよびHTTPSで利用できるように構成します。同じポートでそんなことが起こる可能性は極めて低い。

プロキシ サーバーが独自の TLS 証明書で構成されており、http と https で異なるポートをリッスンします。

または、通常はそうなりますが、プロキシ サーバーはプレーン HTTP 接続のみをサポートしており、HTTPS リソースへの要求では、プロキシ サーバーへの接続にプレーン HTTP を使用する必要があります。(プロキシに接続すると、クライアントは CONNECT メソッドを使用して、プロキシ経由で Web サーバーへの TLS 接続を確立し、エンドツーエンドの暗号化チャネルを作成します。)

つまり、HTTPS_PROXY 変数を次のように変更する必要がある可能性があります。

Environment="HTTPS_PROXY=http://10.330.100.100:3128/"

プロキシを使用する必要がある場合、多くの場合、TLS トラフィックも制御されます。組織の CA 証明書をインストールして有効にする必要がある場合があります。


プロキシの使用が求められる場合、組織内の他のユーザーも同様にプロキシを使用する必要があることを意味します。

つまり、あなた (またはプロキシ サーバー) は、すぐに Docker のレート制限に遭遇することになります。以下を参照してください。https://docs.docker.com/docker-hub/download-rate-limit/

関連情報