こんばんは!ポートフォリオの作成にあたり、Docker+Railsコンテナ構築時にUnknown MySQL server host ‘mysql’エラー
が発生してなかなか解決しなかったので備忘として。
参考
DOCKER+RAILSコンテナ構築時のUNKNOWN MYSQL SERVER HOST ‘MYSQL’エラー
https://www.somuriengineer.com/2019/02/12/dockerrails%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89%E6%99%82%E3%81%AEunknown-mysql-server-host-mysql%E3%82%A8%E3%83%A9%E3%83%BC/
丁寧すぎるDocker-composeによるrails + MySQL on Dockerの環境構築(Docker for Mac)
https://qiita.com/azul915/items/5b7063cbc80192343fc0
####上記のQittaですごく丁寧にDocker for Macの環境構築は記載されていますので割愛。
ハマったエラー
$ docker-compose run web rails db:create
しようとしたら、
or
Access denied for user ‘hoge’@’localhost’ to database ‘mysql’
原因追求
どちらかのファイルが悪いはず...
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ****** <= 任意のパスワード
MYSQL_DATABASE: root
ports:
- "3306:3306"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app_name
ports:
- "3000:3000"
links:
- db
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.ymlのMYSQL_ROOT_PASSWORD
host: db # docker-compose.ymlのservice名
links:
をdatabase:mysql
としてみたり、root
にしてみたり、db
に戻したり、host:も同様に変更してみたり、結局は**Unknown MySQL server host ‘mysql’**もしくは Access denied for user ‘hoge’@’localhost’ to database ‘’
以前にawsで本番環境構築していた時にもmysqlに苦しめられたので苦い思い出...
その時は確かroot権限からアクセス許可を行ったはず。ただそんな難しいエラーじゃないような気がする...
解決方法
参考にした記事に恐らくですが、Dockerの古いイメージが残ってしまい、そちらを参照し続けてしまったことなどが原因かと思います。
と。チームメンバーがこれと似たような事を言っていた事を思い出す(dockerの環境構築ではなく、aws設定時にmysqlでエラーしていた際の話)
以下コマンドでは、可動していないものも含め全てのDockerイメージを削除します。
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
$ docker rmi $(docker images -q)
「これで、もう一度挑戦!」
Docker起動
$ docker-compose build # コンテナをビルド
$ docker-compose up # コンテナの一斉起動
DB作成
$ docker-compose run web rails db:create
Starting portfolio_db_1 ... done
Created database 'app_name_development'
Created database 'app_name_test'
「お、怒られないぞ!いけたかも!」
ブラウザでlocalhost:300にアクセスしてサーバーの起動を確認する
「いけたー!」
まとめ
2019年10月中旬から開始する転職活動へ向けてポートフォリオの作成を開始したので、その都度ハマった部分を備忘録として記事にまとめていこうと思います。次は本番環境へデプロイします。
終わり