質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

768閲覧

docker-compose及びmysqlによるMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (0)の解決方法

Harluz

総合スコア19

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/08/20 13:36

編集2020/08/21 14:10

docker-compose rails mysql nginx の設定を下記のとおりとしているが、
rails db:migrate及びbin/rspecを走らせると
Mysql2::Error::ConnectionError:
Unknown MySQL server host 'db' (0)
のエラーとなり、このエラーからずっと抜け出せない。

docker-compose.yml

version: '3' services: app: build: context: . environment: RAILS_ENV: development env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/my_app - public-data:/my_app/public - tmp-data:/my_app/tmp - log-data:/my_app/log depends_on: - db db: image: mysql:5.7 env_file: - ./environments/db.env volumes: - db-data:/var/lib/mysql ports: - "3316:3306" web: build: context: containers/nginx volumes: - public-data:/my_app/public - tmp-data:/my_app/tmp ports: - "3000:80" depends_on: - app volumes: public-data: tmp-data: log-data: db-data:

database.yml

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('MYSQL_USER') { 'root' } %> password: <%= ENV.fetch('MYSQL_PASSWORD') { 'db_root_password' } %> host: db port: 3306 development: <<: *default database: my_app_development test: <<: *default database: my_app_test

db.env

MYSQL_ROOT_PASSWORD=db_root_password MYSQL_USER=app MYSQL_PASSWORD=password MYSQL_DATABASE=my_app_development DATABASE_HOST=db

grant_user.sql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;

nginx.conf

# プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream my_app { # ソケット通信したいのでpuma.sockを指定 server unix:///my_app/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name example.com [or 192.168.xx.xx [or localhost]]; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /my_app/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @my_app; keepalive_timeout 5; # リバースプロキシ関連の設定 location @my_app { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://my_app; } }

追記
docker-compose.yml

version: '3' services: app: build: context: . environment: RAILS_ENV: development MYSQL_ROOT_PASSWORD: db_root_password MYSQL_USER: app MYSQL_PASSWORD: password MYSQL_DATABASE: my_app_development DATABASE_HOST: db command: bundle exec puma -C config/puma.rb volumes: - .:/my_app - public-data:/my_app/public - tmp-data:/my_app/tmp - log-data:/my_app/log depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: db_root_password MYSQL_USER: app MYSQL_PASSWORD: password MYSQL_DATABASE: my_app_development DATABASE_HOST: db volumes: - db-data:/var/lib/mysql ports: - "3316:3306" web: build: context: containers/nginx volumes: - public-data:/my_app/public - tmp-data:/my_app/tmp ports: - "3000:80" depends_on: - app volumes: public-data: tmp-data: log-data: db-data:

database.yml

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('MYSQL_USER') { 'app' } %> password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %> host: db port: 3306 development: <<: *default database: my_app_development test: <<: *default database: my_app_test

db.env
削除

docker-compose down -v
docker-compose up -d
docker-compose run app rails db:migrate
成功
docker-compose run app rspec
成功?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おはようございます

  • mysqlのコンテナが起動していない (or 落ちている)
  • rails - DBの接続がうまくいっていない(ログイン周り)

いずれかではないでしょうか

docker-compose up
の後にdocker psで"db"コンテナは起動していますか?

投稿2020/08/20 23:49

naokit-dev

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Harluz

2020/08/21 03:35

docker-compose ps Name Command State Ports -------------------------------------------------------------------------------- my_app_app_1 bundle exec puma -C config Up ... my_app_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3316->3306/tcp, 33060/tcp my_app_web_1 /bin/sh -c /usr/sbin/nginx Up 0.0.0.0:3000->80/tcp ... コンテナは立ち上がっております。
naokit-dev

2020/08/21 05:04

念の為の確認ですが rails db:migrateではなく `docker-compose up`してから `docker-compose run app rails db:migrate`されてますよね? 他には認証周りのパスワードやユーザー名を database.ymlとdocker-compose.ymlで一致するようベタ書きにしてみてはいかがでしょうか
Harluz

2020/08/21 14:11

おっしゃる通りに修正した結果、うまく動作しました。 rpsecも docker-compose run app rspec としたところ、動作したようです。
Harluz

2020/08/21 14:15 編集

naokit-dev様、y_shinoda様 お二方には大変お世話になりました。 無事、エラーから脱出できたとともに多角的に問題を指摘していただきありがとうございました。
naokit-dev

2020/08/21 14:20

お役に立てて幸いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問