Docker 国内イメージプロキシが失敗しました。

国内サーバーへのDockerデプロイで、会社がレジストリを提供していない場合、開発者が最初にやるべきことは、国内のレジストリミラーを設定することです。

幸いにも今日、サーバー1台にミラー設定を行いましたが、イメージの取得中に常に取得できないという問題が発生しました。

エラーメッセージ:Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

2025年1月6日、隔日のうちにすべてのサーバーが復旧しました。この件は全く話題にならないとは信じられない。国内のすべてのレジストリミラーがダウンしていたのです

障害の切り分けと修復試行

当初、他のミラー加速アドレスに切り替えて問題を解決することを期待したが、予想とは裏腹に問題は依然として発生し続けた。

次に、ローカルDNS設定を修正して、ネットワーク解析の側面から突破口を探ることを試みたが、結局、ある程度のデバッグを行った結果も、障害は解消されなかった。

この時点で、ローカルネットワークの安定性が大きく疑われるようになり、そこで断念なく携帯電話のテザリングに切り替えて、潜在的なローカルネットワーク障害を回避することを試みた。しかし、結果は失望であり、問題の改善の兆候は見られなかった。

問題の蔓延

現在、国内に数台のサーバーがデプロイされており、すべてDocker環境がインストールされています。これらのサーバーからイメージをプルすることを試みましたが、例外なく失敗し、返ってくるエラーメッセージも一様です。これは問題が特定のデバイスに限られたものではなく、広範囲に及んでいることを示唆しています。

さらに調査した結果、イメージレポジトリのプロキシが瞬く間に停止していることが判明しました。この緊迫した状況下で、迅速に海外のサーバーを使用して試みましたが、幸いにもイメージのプルは正常に戻りました。これは問題が国内のネットワークリンクまたは関連設定にある可能性が高いことを意味します。

戦略修正:迂回戦術

国内での直接リポジトリ取得の経路が重く制限される中、海外のリポジトリは正常にアクセスできる状況を鑑み、プロジェクトを迅速に進めるため、迂回戦術を採用することにしました。まず、国外サーバーに切り替えて必要なイメージを取得し、その後、国内イメージレジストリにプッシュすることで、「データブリッジ」を構築します。 同時に、Dockerfileファイルに対しても修正を行い、イメージのURLを国内環境に適したアドレスに変更してから再ビルドを実行し、最終的に成功裏にデプロイしました。

金融ITプログラマーのいじくり回しと日常のつぶやき
Hugo で構築されています。
テーマ StackJimmy によって設計されています。