Skip to content

Docker Compose の「ERROR internal load metadata」エラー解決方法

問題の概要

Docker Compose でイメージのビルドを実行中に、突然以下のエラーが発生する場合があります:

ERROR [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim:
------
failed to do request: Head https://mcr.microsoft.com/v2/dotnet/sdk/manifests/5.0.201-buster-slim: dial tcp: lookup mcr.microsoft.com on 192.168.65.5:53:

このエラーは、Docker がコンテナレジストリからイメージのメタデータを取得できないことを示しています。以前は正常に動作していたにもかかわらず、突然発生することが特徴です。

主な原因

このエラーには複数の原因が考えられます:

  • ネットワーク接続の問題(DNS解決失敗、プロキシ設定、VPN接続)
  • Dockerの設定ファイルの問題
  • 認証情報の不備や期限切れ
  • ディスク容量不足
  • プラットフォーム互換性の問題
  • レジストリ側の一時的な問題

解決方法

以下に、効果的な解決方法を優先順位に沿って紹介します。

1. 基本的なトラブルシューティング

まずは基本的な確認から始めましょう:

bash
# インターネット接続を確認
ping google.com

# DNS解決を確認
nslookup mcr.microsoft.com

# 対象イメージの手動プルを試す
docker pull mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim
bash
# Dockerサービスの再起動
sudo systemctl restart docker

# またはDocker Desktopの再起動

2. Docker設定ファイルの問題解決

多くの場合、Dockerの設定ファイル (~/.docker/config.json) に問題があります:

bash
# 設定ファイルを削除(再起動後自動再生成)
rm ~/.docker/config.json

# Windowsの場合
del C:\Users\USERNAME\.docker\config.json
bash
# Dockerログインの再実行
docker login

# 複数レジストリを使用している場合
docker login registry.example.com

設定ファイル内の credsStore 設定が問題を引き起こす場合があります:

json
{
  "credsStore": "desktop"
}
json
{
  "credStore": "desktop"
}

WARNING

設定ファイルを編集する前に、必ずバックアップを取ってください。

3. ディスク容量とキャッシュの問題

ディスク容量不足やキャッシュの問題が原因である場合:

bash
# 未使用Dockerリソースの削除
docker system prune -a

# 詳細なクリーンアップ
docker system prune --volumes --all --force
bash
# ディスク使用量の確認
df -h

# Dockerのディスク使用状況
docker system df

4. プラットフォーム互換性の問題

特にApple Silicon (M1/M2) チップを搭載したMacで発生する問題:

bash
# ビルド時にプラットフォームを明示的に指定
docker build --platform=linux/amd64 -t your-image .

# Composeファイルで指定
# docker-compose.ymlに以下を追加
platform: linux/amd64
bash
# 現在のアーキテクチャを確認
arch

# イメージのマルチプラットフォーム対応を確認
docker manifest inspect mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim

5. ネットワーク設定の調整

プロキシやVPNが原因である場合:

bash
# プロキシ設定の確認
echo $http_proxy
echo $https_proxy

# Gitのプロキシ設定も確認
git config --global http.proxy
bash
# VPNが接続されている場合は一時的に切断
# またはDockerをVPNに適合させる設定を追加

6. 高度なトラブルシューティング

上記で解決しない場合、以下の方法を試してください:

bash
# 一時的にBuildKitを無効化
DOCKER_BUILDKIT=0 docker-compose build

# またはdocker-compose.ymlで設定
environment:
  DOCKER_BUILDKIT: 0
bash
# より詳細なエラー情報を取得
docker build --no-cache --progress=plain .
Dockerデーモンの再インストール(最終手段)

どうしても解決しない場合、Dockerの完全再インストールが有効な場合があります:

bash
# Dockerの完全アンインストール後、再インストール
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# その後、公式手順に従って再インストール

予防策

将来同様の問題が発生するのを防ぐための対策:

  1. 定期的なメンテナンス

    bash
    # 定期的なクリーンアップをスケジュール
    docker system prune -a --volumes --filter "until=24h"
  2. 設定ファイルのバックアップ

    bash
    # 設定ファイルの定期的なバックアップ
    cp ~/.docker/config.json ~/.docker/config.json.backup
  3. ネットワーク設定の最適化

    • 安定したDNSサーバーの使用(Google DNS: 8.8.8.8など)
    • プロキシ環境での適切なDocker設定

まとめ

「ERROR internal load metadata」エラーは様々な要因で発生しますが、ほとんどの場合、Dockerの設定ファイルの問題やネットワーク接続の問題が原因です。本記事で紹介した解決方法を順番に試していくことで、問題を解決できるはずです。

INFO

本記事で解決できなかった場合は、Dockerの公式ドキュメントやGitHub Issuesで最新の情報を確認することをお勧めします。