今回の構築環境
- Mac Intel + macOS Ventura(Version 13.4.1)
- Docker Desktop(v4.25.2)
Dockerで環境構築を行なった際に、タイトルが述べられたエラーが二回出ましたので、念のためメモしときます。
エラーの背景
docker-compose up -d --build
で実行する際に何度もこのようなエラーに遭遇しました。
...中略...
=> ERROR [api internal] load metadata for docker.io/library/...
...中略...
------
> [api internal] load metadata for docker.io/library/composer:2.5:
------
failed to solve: composer:2.5: failed to do request: Head "https://registry-1.docker.io/v2/library/composer/manifests/2.5": dialing registry-1.docker.io:443 with direct connection: connecting to ******: dial tcp ******: connect: operation timed out
つまりこのエラーのせいで、タイムアウトという結果になってしまい、結局環境構築ができなくなりますね。
調べてみたら…?
解決策を調べてみたら、私は三つの方法でやってみました。
方法1(もう解決できなさそうな方法だと思う)
一番目のよくある解決策は、DockerのSettings→generalでUse Docker Compose V2のチェックを外すこと。
しかし、私の画面だと、そもそも「Use Docker Compose V2」という箇所は…
無いですね!
Dockerの公式ブログ記事で調べてみたら、とてもでかい文字で「Compose V1: So long and farewell, old friend!(Compose V1: 我が友よ、さようなら!長くお世話になりました!)」書かれています。
詳しく説明すると、2023年4月からはじめ、ユーザーがもうdisable-v2
という関連コマンドを使えなくなりますね。
だからチェックを外せないということですね!
記事でよく書かれている解決方法はいつか使えなくなる恐れがあるので、念のため、公式ブログなどをチェックすることも忘れないでください。
方法2(効くか効かないか自分の運次第で決まるという方法)
これもよく書かれている方法ですが、理由もわからないほど効く時もあります。
それが:
- Dockerのバージョンをアップデートして再起動します
- あるいはとにかくDocker Destopをリスタートします
-
docker-compose disable-v2
(V2を一回無効化)から再びdocker-compose enable-v2
(V2を有効化)へ
方法2での言い方が良くないと認めますが、ダメ元としてやってみたら効くケースもあります。
良かったら使ってみてください。
方法3(この方法で解決できました)
Docker Desktopにも設定できるケースですが、Settings→Docker EngineでJSONのコードを少しだけ修正します。
こちらの記事に参考になりました:https://shiimanblog.com/engineering/error-internal-load-metadata/
私の場合だと:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"insecure-registries": [
"docker.io"
]
}
この中に追加したいのは:
"insecure-registries": [
"docker.io"
]
JSONの文法が間違えなければ、一旦Apply&Restart
を押します。
再起動してから、奇跡が出るかどうかをよく検証してくださいね。
できなければ、方法2という運ゲーと併用することもいいかも!
後書き
今回はdocker-compose up -d --build
で実行する際によく出たエラーについて、自分がいま試した方法を紹介しました。
まだ理解できないところがいっぱいありますが、やはりDockerで環境構築することがいいということも認めます。
ただ、次回同じような問題がまた出たら、冷静に解決できるように願っております。