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

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

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

2819閲覧

docker-composeでMySQLコンテナを起動させたい

SomaSekimoto

総合スコア9

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/04/17 20:39

前提・実現したいこと

Rails API アプリ(アプリ名:Thinky)の開発環境をdockerコンテナを使って作りたいが、

ディレクトリ

-----app bin config db lib log public storage test tmp vendor .gitignore .ruby-version config.ru docker-compose.yml Dockerfile entrypoint.sh Gemfile Gemfile.lock Rakefile README.md

使用するdocker image
ruby 2.6.5
mysql latest

発生している問題・エラーメッセージ

docker-compose upをしたときに、

terminal

1db_1 | 2020-04-17T19:38:08.311518Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. 2Version: '8.0.19' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. 3db_1 | 2020-04-17T19:38:08.411474Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. 4Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

railsアプリのコンテナは正常に起動するが、mysqlのコンテナが起動するが、ブラウザ上でエラーが出る。

ブラウザ上のlocalhost:3000

Mysql2::Error::ConnectionError Can't connect to MySQL server on '127.0.0.1' (115)

該当のソースコード

docker-compose.yml

version: '3' services: db: image: mysql environment: MYSQL_DATABASE: thinky_db MYSQL_ROOT_PASSWORD: 1997 volumes: - mysql-data:/var/lib/mysql ports: - 3306:3306 web: build: . command: bash -c "rm -f /app/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/thinky ports: - "3000:3000" depends_on: - db volumes: mysql-data: driver: local

database.yml

ruby

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 6 7 8development: 9 <<: *default 10 database: thinky_development 11 host: 127.0.0.1 12 port: 3306 13 username: root 14 password: 15 16 17省略

Dockerfile

FROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /thinky WORKDIR /thinky COPY Gemfile /thinky/Gemfile COPY Gemfile.lock /thinky/Gemfile.lock RUN bundle install COPY . /thinky COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]

entrypoint.sh

set -e rm -f /myapp/tmp/pids/server.pid exec "$@"

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.5' gem 'rails', '~> 5.2.4', '>= 5.2.4.2' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' gem 'bootsnap', '>= 1.1.0', require: false group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

仮説

mysqlにlocalhostで接続する場合、デフォルトでunix domain socket経由で接続しようとする。一方で、dockerのデーモンはコンテナ外部と通信するときはunix domain socketを介した通信はできないとのことだったので、protocolをtcpに設定させたい。

### 試したこと

1. /usr/local/etc/my.cnf の記述変更

[mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 port=3306 [client] protocol=TCP port=3306

エラー変わらず。

2. docker-compose.ymlファイルにdbにコマンドの記述を追加

command: --protocol=TCP

エラー

[ERROR] [MY-000067] [Server] unknown variable 'protocol=TCP'

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

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

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

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

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

guest

回答1

0

ベストアンサー

config/database.ymlのhostをlocalhost(127.0.0.1)ではなくdbにしたら繋がりませんか。

投稿2020/04/18 04:17

inductor

総合スコア428

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

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

SomaSekimoto

2020/04/18 07:00

Unknown MySQL server host 'db' 出てしまいます。
SomaSekimoto

2020/04/18 09:41

すいません。dockerのimageやコンテナを全て削除したら成功しました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問