モヒカンメモ

髪色が定期的に変わることに定評のある(比較的)若者Webエンジニアの備忘録

DockerHubにある "mysql:*-debian" イメージで "apt update" が失敗する問題

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にとっては知らないキーで署名されているから本物かどうか分からない状態になっているみたい。

github.com

github.com

応急対応

待ってれば解消すると思うけど、急いで直したい場合は下記のコマンドで直る。

# 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を有効化して終わり、って感じ。