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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

6049閲覧

MySQLに接続出来ないエラー

Takumim

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/02/05 02:43

前提・実現したいこと

Mysql2::Error::ConnectionError: Can't connect to MySQL server on '172.18.0.3' (115) のエラーを解決したい

Docker環境でRuby on RailsのDBを作成する為に

docker-compose run web rails db:create ```と入力すると上記のエラーが発生しました。 ## 発生している問題・エラーメッセージ

Creating notworry_web_run ... done
Can't connect to MySQL server on '172.18.0.3' (115)
Couldn't create 'app_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Can't connect to MySQL server on '172.18.0.3' (115)

/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in connect' /usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in initialize'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in new' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in mysql2_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in new_connection' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in checkout_new_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in try_to_checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in acquire_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in checkout' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:221:in retrieve_connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_handling.rb:189:in connection' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/mysql_database_tasks.rb:8:in connection'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/mysql_database_tasks.rb:16:in create' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:126:in create'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:185:in block in create_current' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:479:in block (2 levels) in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in each' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:476:in block in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in each' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:475:in each_current_configuration'
/usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/tasks/database_tasks.rb:184:in create_current' /usr/local/bundle/gems/activerecord-6.0.3.4/lib/active_record/railties/databases.rake:39:in block (2 levels) in <main>'
/usr/local/bundle/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:23:in block in perform' /usr/local/bundle/gems/railties-6.0.3.4/lib/rails/commands/rake/rake_command.rb:20:in perform'
/usr/local/bundle/gems/railties-6.0.3.4/lib/rails/command.rb:48:in invoke' /usr/local/bundle/gems/railties-6.0.3.4/lib/rails/commands.rb:18:in <main>'
/usr/local/bundle/gems/bootsnap-1.7.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in require' /usr/local/bundle/gems/bootsnap-1.7.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in block in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.0/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in register' /usr/local/bundle/gems/bootsnap-1.7.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in require_with_bootsnap_lfi'
/usr/local/bundle/gems/bootsnap-1.7.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in require' /app/bin/rails:9:in <top (required)>'
/usr/local/bundle/gems/spring-2.1.1/lib/spring/client/rails.rb:28:in load' /usr/local/bundle/gems/spring-2.1.1/lib/spring/client/rails.rb:28:in call'
/usr/local/bundle/gems/spring-2.1.1/lib/spring/client/command.rb:7:in call' /usr/local/bundle/gems/spring-2.1.1/lib/spring/client.rb:30:in run'
/usr/local/bundle/gems/spring-2.1.1/bin/spring:49:in <top (required)>' /usr/local/bundle/gems/spring-2.1.1/lib/spring/binstub.rb:11:in load'
/usr/local/bundle/gems/spring-2.1.1/lib/spring/binstub.rb:11:in <top (required)>' /app/bin/spring:15:in <top (required)>'
bin/rails:3:in load' bin/rails:3:in <main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

## 試したこと 1.docker-compose.yamlファイルのpasswordを設定

version: '3'

services:
web:
build: ./api
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- '3000:3000'
depends_on:
- db
volumes:
- ./api:/app
- bundle:/usr/local/bundle
tty: true
stdin_open: true
db:
image: mysql:5.7
volumes:
- mysql_data:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD: 01110111
ports:
- '3306:3306'
front:
build: ./front
volumes:
- ./front:/app
- node_modules:/app/node_modules
ports:
- '8080:8080'
tty: true
stdin_open: true
command: npm run serve

volumes:
mysql_data:
bundle:
node_modules:

2.config/database.ymlのpassword、hostを変更

MySQL. Versions 5.5.8 and up are supported.

Install the MySQL driver

gem install mysql2

Ensure the MySQL gem is defined in your Gemfile

gem 'mysql2'

And be sure to use new-style password hashing:

https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root

  • password:
  • password: 01110111
  • host: localhost
  • host: 172.18.0.3

development:
<<: *default
database: app_development

Warning: The database defined as "test" will be erased and

re-generated from your development database when you run "rake".

Do not set this db to the same as development or production.

test:
<<: *default
database: app_test

As with config/credentials.yml, you never want to store sensitive information,

like your database password, in your source code. If your source code is

ever seen by anyone, they now have access to your database.

Instead, provide the password as a unix environment variable when you boot

the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database

for a full rundown on how to provide these environment variables in a

production deployment.

On Heroku and other platform providers, you may have a full connection URL

available as an environment variable. For example:

DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"

You can use this database configuration with:

production:

url: <%= ENV['DATABASE_URL'] %>

production:
<<: *default
database: app_production
username: app
password: <%= ENV['APP_DATABASE_PASSWORD'] %>

## 補足情報(FW/ツールのバージョンなど) OS Catalina バージョン10.15.7 MySQL 5.7 参考にしたサイト: [https://qiita.com/Kyou13/items/be9cdc10c54d39cded15](https://qiita.com/Kyou13/items/be9cdc10c54d39cded15) ## 5時間ほど調べてみましたが自力で解決できませんでした。 よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。もし参考になりましたら。

docker-composeを使っていらっしゃるのであれば、docker compose側で各サービス(Rails, MySQL,フロントエンド用のNode.js)の名前解決ができるようになります。

※それぞれのコンテナ内からは、IPアドレスではなく、web,db, front で名前解決できます。

明示的にRails側の config/database.ymlhost: 172.18.0.3 と記載されていますが、こちらではなくて、host: db としてみてはいかがでしょう。

また、設定を変更した上で、以下のコマンドでrailsのコンテナ内でMySQLのクライアントを起動できたりしますので、それで確認できると思います。

docker-compose run web rails dbconsole

https://railsguides.jp/command_line.html#rails-dbconsole

投稿2021/02/05 09:21

編集2021/02/05 09:22
suama

総合スコア1997

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

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

Takumim

2021/02/05 09:34 編集

host: dbにしてみたところ、Created database 'app_development'と表示されました!ありがとうございます! ただ、 docker-compose run web rails dbconsole と入力したところ Couldn't find database client: mysql, mysql5. Check your $PATH and try again. と表示されたのですが、これはDBが作成できていないという事でしょうか。
suama

2021/02/05 10:52

こんばんは、接続は大丈夫そうですね! Created database 'app_development' が出ていれば問題ないです! > Couldn't find database client: mysql, mysql5. こちらは接続確認用のものなので、Railsのコンテナ(動かしている環境)の中にMySQLのクライアントが入っていたらそれを起動する、というコマンドなのでできてなくても大丈夫です!(失礼しました)
Takumim

2021/02/05 12:03

わかりました!調べてみたらMySQLにクライアントツールがあるという事を理解したので、今後使う事があればインストールしてみようと思います。
suama

2021/02/05 12:26

良かったです! また、適切にエラーメッセージや設定ファイルを添えてくださっていたので、切り分けしやすく、こちらこそお役に立てて嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問