発生したこと
dockerでmysqlコンテナを起動しようとした。
一瞬、コンテナが立ち上がるものの、数秒すると停止してまう。
環境
PC:Apple M1 Mac
MacOS: 14.6.1(sonoma)
発生経緯
以下、コマンドを叩いた
docker run --name mysql001 -dit --net network001 \
-e MYSQL_ROOT_PASSWORD=myrootpass \
-e MYSQL_DATABASE=db001 \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=password \
mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-authentication-plugin=mysql_native_password
数秒、コンテナが起動するものの、すぐに停止する
そこで以下コマンドでdockerのログを確認する
docker logs mysql000ex11
ログ例
「[ERROR]」や「[Warning]」で始まる行を確認。
Cannot create user や Authentication plugin に関連するエラーがないか確認。
ログ
以下エラーログが出ていた
2024-11-26T07:16:43.877071Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
2024-11-26T07:16:43.878072Z 0 [ERROR] [MY-010119] [Server] Aborting
原因
MySQL8.0から'default-authentication-plugin=mysql_native_password'が非推奨になった
デフォルト認証プラグインは caching_sha2_password であり、特に設定しなくても安全性が高い SHA-256 が利用されるらしい
暫定対応
使用している MySQL のイメージタグ(例: mysql:latest や mysql:8.0)を確認
バージョンを明確に指定してみる
docker run --name mysql001 -dit --net network001 \
-e MYSQL_ROOT_PASSWORD=myrootpass \
-e MYSQL_DATABASE=db001 \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=password \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
解決
起動したが、latest を指定すると、想定外のバージョンに引き込まれるケースがある。
バージョンを明確に指定することで問題を防げるので指定できるならした方がよさげ。
あと、ログ確認は大事。