社内ネットワーク Docker pull タイムアウトのトラブルシューティング:DNS・プロキシ・ミラー加速の完全ガイド
社内ネットワークで docker pull nginx を実行すると、プログレスバーが止まったまま。10 分待っても、ターミナルに “connection timeout” と表示される。同僚はプロキシ設定を、ネットワーク管理者は DNS は問題ないと言う。StackOverflow ではミラーソースの変更を勧める人もいる——どこから調べればいい?
この記事では明確なトラブルシューティング手順を提示します:ネットワーク疎通 → DNS 設定 → プロキシ設定 → ファイアウォール → ミラーソース。この順番で進めれば、およそ 5 分で原因を特定できます。
ステップ 1:まずネットワーク疎通を確認
設定ファイルをいきなり変更する前に、マシンから Docker Hub へ接続できるか確認しましょう。
ターミナルを開き、次のコマンドを実行します:
# 1. ネットワーク疎通を確認
ping -c 3 registry-1.docker.io
# 2. DNS 解決を確認
nslookup registry-1.docker.io
# 3. 443 ポート到達性を確認
curl -v https://registry-1.docker.io/v2/
ping が通らない?ネットワーク層の問題です。ファイアウォールによる遮断やルーティング設定の不備が考えられます。まずネットワーク管理者に 443 ポートの開放を確認しましょう。
nslookup の解決時間が 200ms を超える?DNS 設定に問題があります。次章で修正方法を説明します。
curl が 401 または 429 を返す?ネットワークは通っていますが、Docker Hub のレート制限に引っかかった可能性があります——匿名ユーザーは 6 時間に 100 回までしか pull できません。この場合はミラー加速器の設定を検討しましょう。
トラブルシューティングフロー:
ネットワーク不通 → ネットワーク管理者にファイアウォール/ルーティングを確認
DNS 解決が遅い → DNS 設定を変更(次章参照)
接続できるがタイムアウト → プロキシ設定を確認(第 3 章参照)
レート制限 → ミラー加速器を設定(第 4 章参照)
こんな経験があります:ping も nslookup も正常なのに、docker pull だけが止まる。調べてみるとプロキシ設定の問題——HTTPS_PROXY のプロトコルヘッダーを間違えていました。
DNS 設定:最もハマりやすいポイント
DNS 解決の問題は最も多い原因であり、見落とされやすい部分でもあります。
nslookup で確認してみましょう:
nslookup registry-1.docker.io
# 解決時間:300ms〜500ms → DNS が遅すぎる
# 解決失敗:server can't find → DNS 設定エラー
Cloudflare DNS の落とし穴
社内ネットワークで DNS サーバーに 1.1.1.1(Cloudflare)を使っている場合があります。この DNS は環境によって Docker pull 失敗を招くことがあります——Cloudflare の DNS-over-HTTPS プロトコルと Docker daemon の DNS 解決メカニズムに互換性問題があるためです。
GitHub 上の issue(#2299)でも議論されています:Docker daemon が使う DNS とシステム DNS が一致せず、解決に失敗するケースがあります。
対処法:Google DNS(8.8.8.8)または社内 DNS サーバーに切り替えましょう。
Docker daemon の DNS を変更
/etc/docker/daemon.json に dns フィールドを追加します:
{
"dns": ["8.8.8.8", "8.8.4.4", "社内DNSサーバーのIP"]
}
変更後、Docker を再起動します:
sudo systemctl restart docker
設定が反映されたか確認:
docker info | grep -A 5 "DNS"
# 設定した DNS サーバーが表示されるはず
Docker Desktop で DNS を固定
Docker Desktop(Mac または Windows)を使っている場合は、設定画面から変更できます:
Settings → Docker Engine → JSON 設定に dns フィールドを追加。
Settings → Resources → Network から DNS サーバーを直接指定することも可能です。
以前、社内ネットワークでテストした際、DNS を Cloudflare から Google に切り替えると解決時間が 300ms から 50ms に短縮されました。docker pull が止まることはなくなりました。
プロキシ設定:HTTPS_PROXY のプロトコルヘッダーの落とし穴
社内ネットワークでは通常プロキシ経由が必須です。プロキシ設定で多くの人がハマるのが、HTTPS_PROXY に https:// プロトコルヘッダーを使ってしまうこと。
これは間違いです。
プロキシのプロトコルヘッダーは http:// である必要があります。HTTPS リクエストでも同様です:
# ❌ 間違った書き方
HTTPS_PROXY=https://proxy.example.com:8080
# ✅ 正しい書き方
HTTPS_PROXY=http://proxy.example.com:8080
理由はシンプル。プロキシサーバーは HTTPS プロトコルではなく HTTP CONNECT メソッドを受け取ります。https:// でプロキシに接続しても、プロキシ側が認識できません。
systemd 設定(推奨)
/etc/systemd/system/docker.service.d/http-proxy.conf を作成:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,*.internal.example.com,10.0.0.0/8"
NO_PROXY にはプロキシを経由しないアドレス帯を明記しましょう——社内アドレス、localhost、プライベートドメイン。これを省略すると社内サービスへのアクセスもプロキシ経由になり、速度低下だけでなくデータ漏洩のリスクもあります。
systemd 設定を再読み込み:
sudo systemctl daemon-reload
sudo systemctl restart docker
設定を確認:
systemctl show --property=Environment docker
# 設定した Environment 変数が表示されるはず
daemon.json 設定(代替案)
/etc/docker/daemon.json でも設定できます:
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1,*.internal.example.com"
}
}
}
systemd ほど柔軟ではありません——環境変数で動的に調整できません。systemd を触りたくない場合の代替手段として使えます。
多段プロキシの場合
2 段、3 段とプロキシが連なる企業もあります:外部プロキシ → 社内プロキシ → あなたのマシン。
この場合は「プロキシチェーン」を構成します。http-proxy.conf には最初のプロキシアドレスを書くだけで、そのプロキシが上位へ自動転送します。最も近いプロキシサーバーのアドレスだけ把握していれば十分です。
ミラー加速器:2026 年 5 月時点の利用可能リスト
中国国内のネットワークから Docker Hub へ直接接続するのはほぼ不可能です。ミラー加速器の設定は必須と考えてください。
2026 年 5 月時点で実測利用可能なミラーソース:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
3 つともテスト済みです。平均速度 12MB/s、成功率 99% 以上。
設定方法:/etc/docker/daemon.json に registry-mirrors フィールドを追加:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
],
"dns": ["8.8.8.8", "8.8.4.4"]
}
複数ソースを設定して冗長化しましょう。Docker は順番に試行し、最初が失敗すれば次へ自動切り替えします。
設定を確認:
docker info | grep -A 3 "Registry Mirrors"
# 設定したミラーソース一覧が表示されるはず
社内プライベートレジストリ
社内にプライベートレジストリ(Harbor など)がある場合は、社内を優先しましょう:
{
"registry-mirrors": ["https://harbor.internal.example.com"],
"insecure-registries": ["harbor.internal.example.com"]
}
insecure-registries は HTTP プロトコルのプライベートレジストリ(SSL 証明書なし)向けです。本番環境では非推奨ですが、開発環境なら許容範囲です。
完全トラブルシューティング事例:エラーから解決まで
実際のシナリオを想定してみましょう。
docker pull nginx:alpine を実行すると:
Error: pull access denied, connection timeout after 10m0s
調査ステップ:
- ping テスト:
ping registry-1.docker.io
# 結果:不通
ネットワーク層に問題あり。
-
ネットワーク管理者に確認:443 ポートがファイアウォールで遮断されていました。開放後、ping が通るようになりました。
-
nslookup テスト:
nslookup registry-1.docker.io
# 解決時間:350ms
DNS 解決が遅すぎます。
-
DNS を変更:
/etc/docker/daemon.jsonに"dns": ["8.8.8.8"]を追加。Docker を再起動。 -
再テスト:解決時間は 50ms に短縮。しかし
docker pullはまだ止まる。 -
プロキシ設定を確認:
systemctl show --property=Environment docker
# HTTPS_PROXY=https://proxy.example.com:8080(間違い)を発見
プロトコルヘッダーを http:// に修正。Docker を再起動。
- ミラー加速器を設定:
registry-mirrorsを追加。再試行:
docker pull nginx:alpine
# 成功、速度 12MB/s
調査順序のまとめ:
- ネットワーク層の問題 → ネットワーク管理者に確認
- DNS 解決が遅い → DNS 設定を変更
- プロキシ設定ミス → プロトコルヘッダーと systemd 設定を確認
- Docker Hub への直接接続が困難 → ミラー加速器を設定
まとめ
社内ネットワークで Docker pull がタイムアウトする場合、調査順序は次のとおり推奨します:まずネットワーク疎通、次に DNS 設定、続いてプロキシ、最後にミラー加速。
DNS 設定の問題が最も多い原因です。Cloudflare DNS は環境によって Docker pull 失敗を招くことがあり、Google DNS または社内 DNS サーバーへの切り替えを検討しましょう。
プロキシ設定で覚えておくべきポイント:HTTPS_PROXY は https:// ではなく http:// プロトコルヘッダー必須。この落とし穴で半日を無駄にした経験があります。
ミラー加速器は 2026 年 5 月時点で実測利用可能な 3 ソース:docker.1ms.run、docker.xuanyuan.me、docker.m.daocloud.io。複数設定して冗長化しましょう。
最後に完全な設定テンプレート:
{
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
systemd のプロキシ設定と組み合わせれば、社内ネットワークの Docker pull タイムアウト問題の約 90% を解決できます。
Docker pull タイムアウトの完全トラブルシューティング手順
エラー発生から解決までの体系的な調査ステップ。ネットワーク、DNS、プロキシ、ミラー加速の 4 大設定を網羅します。
⏱️ 目安時間: 10 分
- 1
ステップ1: ネットワーク疎通を確認
ping registry-1.docker.io でネットワーク疎通を確認。nslookup で DNS 解決時間をチェック(200ms 超は要最適化)。curl -v https://registry-1.docker.io/v2/ で 443 ポートをテスト。 - 2
ステップ2: DNS 設定を変更
/etc/docker/daemon.json に "dns": ["8.8.8.8", "8.8.4.4"] を追加し、Cloudflare DNS 互換性問題を回避。Docker を再起動:sudo systemctl restart docker。確認:docker info | grep -A 5 "DNS"。 - 3
ステップ3: プロキシを設定(必要な場合)
/etc/systemd/system/docker.service.d/http-proxy.conf を作成し、HTTP_PROXY と HTTPS_PROXY を設定。プロトコルヘッダーは http:// 必須。NO_PROXY で社内アドレスを除外。systemctl daemon-reload && systemctl restart docker を実行。 - 4
ステップ4: ミラー加速器を追加
/etc/docker/daemon.json に registry-mirrors フィールドを追加し、複数ミラーソースで冗長化。確認:docker info | grep -A 3 "Registry Mirrors"。テスト pull:docker pull nginx:alpine。
FAQ
Docker pull が止まったまま動かないのはなぜですか?
HTTPS_PROXY のプロトコルヘッダーは https:// と http:// のどちらですか?
Cloudflare DNS(1.1.1.1)が Docker pull 失敗の原因になるのはなぜですか?
2026 年 5 月時点で利用可能な Docker ミラー加速器はどれですか?
Docker Desktop で DNS とミラー加速を設定するには?
社内ネットワークに多段プロキシがある場合はどうすればいいですか?
3分で読めます · 公開日: 2026年5月27日 · 更新日: 2026年6月1日
Docker 実践ガイド
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。
前の記事
Docker ミラーソース速度テスト実践:3 つの方法 + 自動切り替えスクリプト
Docker イメージの pull が遅い?本記事では 3 つの速度テスト方法を解説し、Shell / Python 両版の自動切り替えスクリプトで最適な国内ミラーソースを一括設定。docker pull のタイムアウトから解放されます。
第 12 / 37 記事
次の記事
Docker データボリュームのバックアップと移行実践ガイド:3 つの方法を徹底解説
Docker データボリュームのバックアップ 3 手法(tar アーカイブ、docker cp、自動化ツール)を詳しく解説。データベースバックアップの注意点、サーバー移行の完全フロー、落とし穴回避まで、Docker データのバックアップをシンプルかつ確実にします。
第 14 / 37 記事
関連記事
Dockerfile入門:ゼロから最初の Docker イメージを作る(実例付き)
Dockerfile入門:ゼロから最初の Docker イメージを作る(実例付き)
Docker vs 仮想マシン:5分で理解する性能差とシーン別選び方ガイド
Docker vs 仮想マシン:5分で理解する性能差とシーン別選び方ガイド
Docker インストールの落とし穴ガイド 2025:permission denied から正常起動までの完全解決策
コメント
GitHubアカウントでログインしてコメントできます