10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)への対処

Last updated at Posted at 2022-08-04

docker-composeで生成したコンテナのMySQLへログインしようとしてパスワードを何度見返しても

ERROR 1045 (28000): Access denied for user 'testpass'@'localhost' (using password: YES)

と怒られてしまい入れないことで何時間も溶かしました。チクショー

docker-compose.yml
~省略~
    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を入れ直したところ無事にログインできました。

docker-compoes.yml
~省略~
volumes:
  mysql_test_volume:
    name: mysql_test_volume

name: mysql_test_volumeの名前と同名で過去にvolume生成していました。おそらく古いvolumeにおけるSQLのログインパスが必要だったのか、それ以外の理由でエラーが起こっています。

stack overflowの回答に助けられました。

参考:MYSQL_ROOT_PASSWORD is set but getting "Access denied for user 'root'@'localhost' (using password: YES)" in docker container

他に試していたこと

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の操作は時間が経つとすぐに忘れてしまう。ツライ

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?