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. 基本的なトラブルシューティング
まずは基本的な確認から始めましょう:
# インターネット接続を確認
ping google.com
# DNS解決を確認
nslookup mcr.microsoft.com
# 対象イメージの手動プルを試す
docker pull mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim
# Dockerサービスの再起動
sudo systemctl restart docker
# またはDocker Desktopの再起動
2. Docker設定ファイルの問題解決
多くの場合、Dockerの設定ファイル (~/.docker/config.json
) に問題があります:
# 設定ファイルを削除(再起動後自動再生成)
rm ~/.docker/config.json
# Windowsの場合
del C:\Users\USERNAME\.docker\config.json
# Dockerログインの再実行
docker login
# 複数レジストリを使用している場合
docker login registry.example.com
設定ファイル内の credsStore
設定が問題を引き起こす場合があります:
{
"credsStore": "desktop"
}
{
"credStore": "desktop"
}
WARNING
設定ファイルを編集する前に、必ずバックアップを取ってください。
3. ディスク容量とキャッシュの問題
ディスク容量不足やキャッシュの問題が原因である場合:
# 未使用Dockerリソースの削除
docker system prune -a
# 詳細なクリーンアップ
docker system prune --volumes --all --force
# ディスク使用量の確認
df -h
# Dockerのディスク使用状況
docker system df
4. プラットフォーム互換性の問題
特にApple Silicon (M1/M2) チップを搭載したMacで発生する問題:
# ビルド時にプラットフォームを明示的に指定
docker build --platform=linux/amd64 -t your-image .
# Composeファイルで指定
# docker-compose.ymlに以下を追加
platform: linux/amd64
# 現在のアーキテクチャを確認
arch
# イメージのマルチプラットフォーム対応を確認
docker manifest inspect mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim
5. ネットワーク設定の調整
プロキシやVPNが原因である場合:
# プロキシ設定の確認
echo $http_proxy
echo $https_proxy
# Gitのプロキシ設定も確認
git config --global http.proxy
# VPNが接続されている場合は一時的に切断
# またはDockerをVPNに適合させる設定を追加
6. 高度なトラブルシューティング
上記で解決しない場合、以下の方法を試してください:
# 一時的にBuildKitを無効化
DOCKER_BUILDKIT=0 docker-compose build
# またはdocker-compose.ymlで設定
environment:
DOCKER_BUILDKIT: 0
# より詳細なエラー情報を取得
docker build --no-cache --progress=plain .
Dockerデーモンの再インストール(最終手段)
どうしても解決しない場合、Dockerの完全再インストールが有効な場合があります:
# Dockerの完全アンインストール後、再インストール
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# その後、公式手順に従って再インストール
予防策
将来同様の問題が発生するのを防ぐための対策:
定期的なメンテナンス
bash# 定期的なクリーンアップをスケジュール docker system prune -a --volumes --filter "until=24h"
設定ファイルのバックアップ
bash# 設定ファイルの定期的なバックアップ cp ~/.docker/config.json ~/.docker/config.json.backup
ネットワーク設定の最適化
- 安定したDNSサーバーの使用(Google DNS: 8.8.8.8など)
- プロキシ環境での適切なDocker設定
まとめ
「ERROR internal load metadata」エラーは様々な要因で発生しますが、ほとんどの場合、Dockerの設定ファイルの問題やネットワーク接続の問題が原因です。本記事で紹介した解決方法を順番に試していくことで、問題を解決できるはずです。
INFO
本記事で解決できなかった場合は、Dockerの公式ドキュメントやGitHub Issuesで最新の情報を確認することをお勧めします。