docker-composeで生成したコンテナのMySQLへログインしようとしてパスワードを何度見返しても
ERROR 1045 (28000): Access denied for user 'testpass'@'localhost' (using password: YES)
と怒られてしまい入れないことで何時間も溶かしました。チクショー
~省略~
environment:
- MYSQL_USER=testpass
- MYSQL_PASSWORD=testpass
- MYSQL_ROOT_PASSWORD=testpass
でenv設定していました。mysql:8.0を使用。
結論として以下の方法でうまく行きました
volumeを削除して入れ直す
docker-compose down -v
docker-compose up -d
にてvolumeにてdocker-composeで設定したvolumeもろとも入れ直し。
※volumeの中身が消えてしまうので怖い人は名前を指定して削除しても良いかも。
docker volume ls
docker volume rm ${VOLUME NAME}
これでログインできた
docker-compose exec db sh -c 'mysql -utestpass -ptestpass'
mysql>
原因
docker環境構築にまだ慣れておらず、iamgeファイルを削除すればvolumeやnetworkなども消えていると思い込んでいました。
そこでvolumeを入れ直したところ無事にログインできました。
~省略~
volumes:
mysql_test_volume:
name: mysql_test_volume
name: mysql_test_volumeの名前と同名で過去にvolume生成していました。おそらく古いvolumeにおけるSQLのログインパスが必要だったのか、それ以外の理由でエラーが起こっています。
stack overflowの回答に助けられました。
他に試していたこと
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)のエラーの記事はよく見かけました(volume起因のものはほぼありませんでしたが)。
volumeで上手くいかなかった人は試してみる内容になるかと。
パスワードをワンライナーで入力する
docker-compose exec db sh -c 'mysql -utestpass -ptestpass'
の -ptestpass なのですが、-pオプションにいたってだけはなぜか -p testpass ではなく -ptestpass にしなければなりません。
ちなみに-uオプションは-u testpassでもログインできます
パスワードを無視してログインする
bash上で MYSQLD_OPTS="--skip-grant-tables" のenv環境設定するとパスワード無視してログインできるようです。
しかし通常では使いたくない手法。
詳細は下の記事をどうぞ。
参考:ERROR 1045 (28000):でMySQLにrootログインできない場合の対策
ログイン方法を変えてみる
docker exec -it ${コンテナID or コンテナ名} mysql -u testpass -ptestpass
or
//bashへ入ってからログインする
docker exec -it ${コンテナID or コンテナ名} bash
mysql -utestpass -ptestpass
Dockerの操作は時間が経つとすぐに忘れてしまう。ツライ