DockerHubにある mysql:*-debian
系イメージで、 apt update
が失敗する問題が起きている。
apt updateしようとすると起きるエラー
$ docker run --rm -it --platform linux/amd64 mysql:8-debian bash root@6f04ccbce772:/# apt update ... Err:2 http://repo.mysql.com/apt/debian bullseye InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C ... Reading package lists... Done W: GPG error: http://repo.mysql.com/apt/debian bullseye InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C E: The repository 'http://repo.mysql.com/apt/debian bullseye InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.
重要なのはこの辺 → the public key is not available: NO_PUBKEY B7B3B788A8D3785C
MySQLのapt repositoryの署名に使われているキーが更新されたので、古いキーしか知らないaptにとっては知らないキーで署名されているから本物かどうか分からない状態になっているみたい。
応急対応
待ってれば解消すると思うけど、急いで直したい場合は下記のコマンドで直る。
# mv /etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql.list.disabled # apt-get update && apt-get install -y curl && apt-get clean # curl -sSfL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | gpg --import # gpg --batch --export "B7B3B788A8D3785C" > /etc/apt/keyrings/mysql.gpg # mv /etc/apt/sources.list.d/mysql.list.disabled /etc/apt/sources.list.d/mysql.list # apt-get update
簡単に説明すると、MySQLのリポジトリから最新のGPGキーを取得したい → それにはcurl(wgetでもいいけど)が必要 → MySQL apt repositoryを一時的に無効にしてcurlをインストール → GPGキーの更新が終わったらMySQLのapt repositoryを有効化して終わり、って感じ。