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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

2回答

490閲覧

Dockerを使用したRailsアプリケーションの起動の際に、MySQLに接続できない(Mysql2::Error::ConnectionError)

yomigi

総合スコア43

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クリップ

投稿2020/10/01 17:06

編集2020/10/01 17:11

Dockerを使用したRailsアプリケーションの構築をしております。

  • rubyのバージョン:ruby:2.7.1
  • railsのバージョン:6.0.3
### Dockerfile FROM ruby:2.7.1-alpine3.11 ARG PRECOMPILE ENV APP_HOME /app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME ADD Gemfile* $APP_HOME/ RUN apk update && \ apk add --no-cache build-base linux-headers git mariadb-dev mysql-client imagemagick6-dev tzdata && \ bundle install && \ rm -rf /usr/local/bundle/cache/* /usr/local/share/.cache/* /var/cache/* /tmp/* ADD . $APP_HOME/
### docker-compose.yml version: '3.7' services: db: container_name: test_mysql image: mysql:8.0.20 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test MYSQL_USER: test_user MYSQL_PASSWORD: test_password ports: - '3306:3306' app: &app container_name: test_app build: context: . dockerfile: Dockerfile volumes: - type: bind source: . target: /app - type: volume source: bundle target: /usr/local/bundle environment: - MYSQL_DATABASE_NAME=test - MYSQL_USER=test_user - MYSQL_PASSWORD=test_password - MYSQL_HOST=db - NODE_ENV=development - MYSQL_TEST_USER=root - MYSQL_TEST_PASSWORD=root command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" ports: - '3000:3000' links: - db tty: true stdin_open: true volumes: bundle:

上記のように設定をしております。

ここで

  • docker-compose build
  • docker-compose up

をしたところ、rails自体は起動するのですが、以下のようにmysqlに接続できない旨のエラーが出てしまいます。。

app_1 | => Booting Puma app_1 | => Rails 6.0.3 application starting in development app_1 | => Run `rails server --help` for more startup options app_1 | Puma starting in single mode... app_1 | * Version 4.3.3 (ruby 2.7.1-p83), codename: Mysterious Traveller app_1 | * Min threads: 5, max threads: 5 app_1 | * Environment: development app_1 | * Listening on tcp://0.0.0.0:3000 app_1 | Use Ctrl-C to stop app_1 | Started GET "/" for 172.19.0.1 at 2020-10-01 16:59:56 +0000 app_1 | app_1 | Mysql2::Error::ConnectionError (Can't connect to MySQL server on '127.0.0.1' (115)): app_1 | app_1 | mysql2 (0.5.3) lib/mysql2/client.rb:90:in `connect' app_1 | mysql2 (0.5.3) lib/mysql2/client.rb:90:in `initialize' app_1 | activerecord (6.0.3) lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new'

こちらの原因について、どなたかご教授いただけないでしょうか。。
開示する情報に不足がありましたら、追記させていただきます。

ちなみに、dockerで起動しているmysql自体には直接ならば接続が可能な状況です。

~ % mysql -h 127.0.0.1 -u test_user -p Enter password: test_password Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.20 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+ 2 rows in set (0.01 sec)

docker ps を行った結果は以下のようになっております。

% docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES XXXXXXXX test_app "/bin/sh -c 'rm -f t…" 57 minutes ago Up 9 minutes 0.0.0.0:3000->3000/tcp test_app YYYYYYYY mysql:8.0.20 "docker-entrypoint.s…" 57 minutes ago Up 9 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp test_mysql

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

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

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

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

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

guest

回答2

0

config/database.yamlのhostをdocker-compose.yamlで渡しているような環境変数から取得して,設定するようにしては,いかがでしょうか?
おそらく現状だと,localhostや127.0.0.1が設定されていると思います.

投稿2020/10/01 21:19

kmdkuk

総合スコア141

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

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

yomigi

2020/10/02 07:51

ありがとうございます、確認してみます!
guest

0

ベストアンサー

起動順の関係で、アプリ起動時に、まだDBが起動しきれていないのでは?

depends_onの利用など以下のURLを参考にして調整して見てはいかがでしょうか。
https://docs.docker.jp/compose/startup-order.html

投稿2020/10/02 02:22

t_obara

総合スコア5488

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

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

yomigi

2020/10/02 07:50

ありがとうございます!そちらのリンク確認させていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問