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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

docker-compose で rails から mysql に接続できない

VanS
VanS

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1回答

0評価

0クリップ

725閲覧

投稿2020/12/11 08:08

前提・実現したいこと

Mac に brew install mysql した環境で Rails の開発をしています。
これを Docker化したいので Dockerfile と docker-compose.yml を書きました。

docker-compose up で起動し、 localhost:3000 にアクセスすると Mysql2::Error が出ます。

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

Mysql2::Error Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

該当のソースコード

yml

# docker-compose.yml version: '3' services: db: image: mysql:5.7 environment: MYSQL_USER: root MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' volumes: - ./db/mysql/volumes:/var/lib/mysql web: build: . environment: MYSQL_ROOT_PASSWORD: password command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db

yml

# config/database.yml default: &default adapter: mysql2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV.fetch('MYSQL_ROOT_PASSWORD', '') %> # socket: /var/lib/mysql/mysql.sock # socket: /var/run/mysqld/mysqld.sock host: <%= ENV.fetch('DB_HOST', '') %>

試したこと

docker-compose up のログ出力を見ていると sock ファイルは /var/run/mysqld/mysqld.sock となっています。

db_1 | Version: '5.7.31' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)

しかし、ネットでググってみると /var/lib 配下に sock ファイルは作られるようです。
たしかに volume は /var/lib/mysql をしているのでこれでは参照できませんよね。

質問

なぜ、mysqld はデフォルトで /var/lib/mysql/mysql.sock ではなく、 /var/run/mysqld/mysqld.sock を参照しているのでしょうか?
rails からDBにアクセスさせるにはどうしたらいいでしょうか?

追記: あー、もしかしてコンテナ間通信に sokcet ファイルは関係ないのかも。 socket ファイルを共有する手もあるけど host 指定して接続するやり方もあるっぽい。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。