はじめに
この記事はrails初学者が書いています。
間違いがあれば指摘してください。
よろしくお願いします。
状況
docker-composeでrailsサーバー、MySQLサーバーを立ち上げ、
rails db:createしようとしたら以下のエラーが出ました。
Access denied for user 'user'@'host' (using password: YES)
日本語に訳すと、「hostのuserからの接続が拒否されました。」みたいな感じですかね。
原因
docker-composeでvolumeを永続化しており、同名プロジェクトのデータが残っていたからです。
解決策
volumeを削除しましょう。
$ docker volume ls
DRIVER VOLUME NAME
local test-database
local test-bundle
...
$ docker volume rm test-database
あとは、今まで通りユーザーを作成し、権限を付与します。
<>で囲まれた部分を自分の環境に修正してください。
docker-compose exec db mysql -u root -p -e"CREATE USER '<username>'@'%' IDENTIFIED BY '<password>';GRANT ALL PRIVILEGES ON *.* TO '<username>'@'%';FLUSH PRIVILEGES;"
ちなみに
docker system prune
というコマンドがあり、使われていないイメージ、コンテナ、ネットワークを削除できます。
volumeは削除されません(ここ大事)
volumeも削除するときは--volume
をつけましょう。
最後に
せっかくdockerを使ってクリーンな環境を作っても
volumeを多用しすぎると意味がないので気をつけましょう。(戒め)
参考
【MySQL】Mysql2::Error::ConnectionError: Access denied for user ~への対処法【環境構築】
使用していない Docker オブジェクトの削除(prune)