あらすじ
5年前くらいから業務委託としてちょいちょい参画させていただいているクライアントさんのWEBサービスはとってもレガシーで、PHP5.3, PHP5.5 を普通に使っています。
まぁそれで僕のように昔からエンジニアやっててPHP4とかも触っていた経験があるような人は重宝される訳です。
最近PCが重くなっていたのでリフレッシュし、環境構築からやり直ししてみたらエラーが発生しました。
イメージをダウンロードできず、ローカル環境を構築できません。
解決方法は下の方に書いてあるので、内容がどうでもいい方は下までスクロールして下さい。
エラー内容
target admin: failed to solve: failed to load cache key: Pulling Schema 1 images have been deprecated and disabled by default since containerd v2.0. As a workaround you may set an environment variable CONTAINERD_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1, but this will be completely removed in containerd v2.1.
Schema1 とか今まで Docker 使ってて初めて聞いた単語ですが、調べてみると DockerHub に保管されているイメージのレイヤー管理にバージョンがあるということですかね。
バージョン | 特徴 | 状況 |
---|---|---|
Schema1 | 古い形式、JSONでレイヤー管理 | 非推奨 |
Schema2 | Digest対応、レイヤーを明示的に保持 | 現在の主流 |
DockerHub 上で確認
Layers が (0) で表示されないものが、Schema1 になるらしいとのこと。
古いレイヤー管理方式なので表示できなくなっているということっぽい。
ChatGPT さんが提示してくれた解決方法(僕は駄目でした)
一時的に Schema1 をダウンロード出来るようにして build を行う。
これで通る人も居るかもしれないので掲載。
CONTAINERD_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1
解決した方法
skopeo コマンドのインストール
sudo apt update
sudo apt install skopeo
Schema1 のイメージを Schema2 に変換しながらダウンロード
skopeo copy --format v2s2 \
docker://docker.io/library/php:5.3.29-apache \
docker-daemon:php:5.3.29-apache
そのままビルドする
一度イメージをローカルに落とせば、次回以降は再ビルドしようと問題なくなります。