docker-composeでrailsを起動する際、DBのMYSQL_USERをrootにすると発生する問題

はじめる

普段、コンテナの外で開発をしている時にはバリバリ動いているアプリが、docker-compose upをした途端に「”Access denied for user ‘root’@’localhost”」とか言われて、データベースにアクセスできずに困ることってあると思います。

原因

MySQLのコンテナを作成する際に指定する環境変数で、MYSQL_USERにrootを指定している場合に、こういった問題が起こります。

普段、アプリからはrootでログインしているから、取り急ぎコンテナでもrootでいいや。database.ymlもusernameはデフォルトでrootだし、リリース時の正式なユーザ名は、後で運用担当と相談して決めよう。みたいなのがアウトでございます。

また、上記の設定でdocker-compose upを行うと、その設定内容がdocker volumeに残るので、以降に環境変数を弄っても、染み付いてしまったrootのあんちくしょうが、いつまで経っても同じエラーを引き起こし続けます。

docker volume rm xxxxxx

上記のコマンドで対象のvolumeを削除した後に、MYSQL_USERをroot以外の名前に指定することで、正しくアプリケーションから、MySQLに接続ができるようになるかと思います。もちろん、その他の設定が正しく行われていることが前提です。

Rails

Posted by poison