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

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

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

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

MySQL

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

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

Q&A

解決済

1回答

3117閲覧

既存RailsアプリにDockerを導入するときのMysql2エラー

tat_23

総合スコア18

docker-compose

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

MySQL

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

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

0グッド

0クリップ

投稿2019/11/16 02:46

初歩的な質問かもしれませんが、質問させてください。

今現在、https://qiita.com/kenzoukenzou104809/items/b9e716204e0cd0cea447 こちらのサイトを参考にして既存Railsアプリの開発環境をdockerで構築しようとしております。

既存アプリのルートにDockerfile,docker-compose.ymlを追加して中身を記述、database.ymlを変更して docker-compose build まで問題なく通りました。

開発、テスト環境のDBにはmysqlを使っています。
最初のユーザー登録(パスワードの設定など)も含めて完了しており、mysqlの中には入れる状態です。

しかし docker-compose run web rake db:create db:migrate こちらのコマンドで立ち上げようとすると、

Starting book_give_app_db_1 ... done Host '172.24.0.4' is not allowed to connect to this MySQL server Couldn't create 'db/development_mysql' database. Please check your configuration. rake aborted! Mysql2::Error: Host '172.24.0.4' is not allowed to connect to this MySQL server /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `connect' /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `initialize' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:879:in `new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:923:in `checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:902:in `try_to_checkout_new_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:863:in `acquire_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:587:in `checkout' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:431:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:1111:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_handling.rb:231:in `retrieve_connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/connection_handling.rb:199:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/mysql_database_tasks.rb:8:in `connection' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/mysql_database_tasks.rb:16:in `create' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:126:in `create' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:185:in `block in create_current' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:479:in `block (2 levels) in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:476:in `each' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:476:in `block in each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:475:in `each' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:475:in `each_current_configuration' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/tasks/database_tasks.rb:184:in `create_current' /usr/local/bundle/gems/activerecord-6.0.0/lib/active_record/railties/databases.rake:39:in `block (2 levels) in <top (required)>' /usr/local/bundle/gems/rake-13.0.0/exe/rake:27:in `<top (required)>' Tasks: TOP => db:create (See full trace by running task with --trace)

というエラーが出ます????
mysqlへの接続で問題が生じているのは分かるのですが、具体的にどこが問題なのかがどうしても分かりません。

関連ファイルは以下です。参考記事はpotgresを使っているので、その部分をmysqlに変えています。
docker-compose.yml

#docker-composeのバージョン version: '3' services: db: image: mysql:latest ports: - '5432:5432' web: build: context: . dockerfile: Dockerfile command: bundle exec rails s -p 3000 -b '0.0.0.0' tty: true stdin_open: true depends_on: - db # DB側のコンテナが出来上がってからwebを実行する ports: - "3000:3000" # ホストからゲストへポートフォワード volumes: - .:/myproject # ソースコード変更したらDocker側も即反映されるように volumes: mysql-data: driver: local

怪しいかなと思っているのがwebのvolumesのところです...

Dockerfile

FROM ruby:2.5.5 RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y mariadb-client --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs # yarnパッケージ管理ツールをインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install nodejs WORKDIR /myproject ADD Gemfile /myproject/Gemfile ADD Gemfile.lock /myproject/Gemfile.lock RUN gem install bundler RUN bundle install ADD . /myproject

database.yml

# SQLite. Versions 3.8.0 and up are supported. # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' # default: &default adapter: mysql2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 username: root password: host: db encoding: utf8 development: <<: *default database: db/development_mysql # 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: db/test_mysql production: <<: *default adapter: postgresql encoding: unicode pool: 5

Herokuでデプロイしている関係でproductionのみpostgresを使用しております。

database.yml のdefaultの部分、ここの password にローカルのmysqlパスワードを入れてもダメでした(dockerを使うので当たり前かもしれませんが)

mysqlのuserなどはwebコンテナの中に入って新しく作成する必要があるのでしょうか?????
どなたか教えていただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Mysql2::Error: Host '172.24.0.4' is not allowed to connect to this MySQL server

というエラー文言にある通りMySQLに接続する権限が不足しているためエラーが発生しています。

具体的にはアプリケーションサーバー側からMySQLに接続できるようにMySQLで権限を付与してやる必要があります。

MySQLの「ユーザー作成」と「権限付与」で解決できると思います。

https://proengineer.internous.co.jp/content/columnfeature/6638

投稿2019/11/16 03:20

wuzzy

総合スコア152

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

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

tat_23

2019/11/16 05:48

ご回答ありがとうございます!! mysqlのバージョンは8を使っているので、 https://qiita.com/tech31/items/e40a3e73c237c97f94f1 こちらを参考にrootユーザーに権限を付与しようとしました。 すみません、権限を与える際にエラーが出ていたのはmysqlのバージョンによるものだったようです。 こちらを参考にしてrootユーザーに権限を与えようとしました。 rootユーザーとしてログインした状態で、 ``` mysql> grant all on *.* to 'root'@'%'; ERROR 1410 (42000): You are not allowed to create a user with GRANT ``` このようになってしまいました... 「権限を与える」というのはとりあえずdockerとは関係なく、ローカルのmysql内での話ですよね? 権限が無いよと怒られているようですが、その権限を与えたいのですが、何かわかることがありましたら教え頂けると嬉しいです。
wuzzy

2019/11/19 12:54 編集

migrationを実行したときに接続する先のホストのMySQLです。 つまりこの場合はdockerのDBコンテナ内のMySQLを指していると思います。 ローカルでは無いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問