Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

posted at

updated at

【Docker】Docker+Railsコンテナ構築時のMYSQLエラー

こんばんは!ポートフォリオの作成にあたり、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

しようとしたら、

スクリーンショット 2019-09-24 21.08.45.png

or

Access denied for user ‘hoge’@’localhost’ to database ‘mysql’

原因追求

どちらかのファイルが悪いはず...

作業ディレクトリ/docker-compose.yml
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
作業ディレクトリ/config/database.yml
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-09-24 21.32.33.png

「いけたー!」

まとめ

2019年10月中旬から開始する転職活動へ向けてポートフォリオの作成を開始したので、その都度ハマった部分を備忘録として記事にまとめていこうと思います。次は本番環境へデプロイします。

終わり

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What are the problem?