筆者の動作環境
macOS Monterey(バージョン12.4),MacBook Pro(M1 2020),メモリ16GB,
エラー内容
以下のようなdockerfileを用いたimageのbuildが急に今朝(2022年7月6日)から失敗するようになりました.
FROM --platform=linux/amd64 mysql:5.7
RUN apt-get update
(注)M1以外の方はplatform指定を除いてください.
エラー内容は以下のようなものです.
$ docker build -t test .
[+] Building 1.1s (5/5) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 98B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/mysql:5.7 0.8s
=> CACHED [1/2] FROM docker.io/library/mysql:5.7@sha256:4279d155f8cab19149c6078b20d53976f1498e31d6f848ac83e11323909b41f1 0.0s
=> ERROR [2/2] RUN apt-get update 0.3s
------
> [2/2] RUN apt-get update:
#5 0.232 /bin/sh: apt-get: command not found
------
executor failed running [/bin/sh -c apt-get update]: exit code: 127
原因
mysqlの公式imageでのパッケージダウンロードコマンドが2022年7月6日を境にyumに切り替わったからみたいです?
mysql:5.7は2022年7月6日7時57分時点でリンク先のものになっています.
IMAGE LAYERSの6つめなどでyumが使用されているのが確認できます.
過去のIMAGE LAYERSの見方が分からないので,過去のものが確認できず...
(このレポジトリで管理されているようです.)
過去の記事でFROM mysql:5.7
してRUN apt-get update
してる例はたくさんあるし,自分もそれをしていたので,昔はapt-get
に対応してものがyum
に切り替わったってことのようです.
試しに
FROM --platform=linux/amd64 mysql:5.7
RUN yum update
で実行してみたところ問題なく動作しました.
対処法
とりあえずの対処法としてはapt-get
がデフォルトでパッケージインストールコマンドとして使われているdebianのイメージを明示的に使うようにしましょう.
FROM --platform=linux/amd64 mysql:5.7-debian
RUN apt-get update
mysql:5.7
が使いたい場合にはapt-get
をyum
に書き換える必要がありそうですね.
追記
根本原因
mysqlのdocker imageが管理されているレポジトリをみにいくと,tagが変更されてるのが確認できました.
5.7系統の一部,8.0系統の一部がdebianベースのdockerfileからoracleベースのdockerfileに変更されているみたいですね.
コミット履歴は以下のリンクはこちら
またこちらのPRの議論を見る感じ,今後はOracleベースでいくみたいです.
なので,yum対応を長期的にはした方がいい感じですかね.(以下本文引用)
we're not planning to remove the Debian-based variants of 5.7 or 8.0 anytime soon (however, if there's ever an 8.1 or 9.0, that will likely be Oracle-only).
(deepl訳)Debian ベースの 5.7 や 8.0 の亜種をすぐに削除する予定はありません (しかし、もし 8.1 や 9.0 があるならば、それはおそらく Oracle 専用になるでしょう)。
(2022年7月6日13時くらいに追記)