前提・実現したいこと
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
1# docker-compose.yml 2version: '3' 3services: 4 db: 5 image: mysql:5.7 6 environment: 7 MYSQL_USER: root 8 MYSQL_ROOT_PASSWORD: password 9 ports: 10 - '3306:3306' 11 volumes: 12 - ./db/mysql/volumes:/var/lib/mysql 13 14 15 web: 16 build: . 17 environment: 18 MYSQL_ROOT_PASSWORD: password 19 command: bundle exec rails s -p 3000 -b '0.0.0.0' 20 volumes: 21 - .:/myapp 22 ports: 23 - "3000:3000" 24 depends_on: 25 - db
yml
1# config/database.yml 2default: &default 3 adapter: mysql2 4 5 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 6 username: root 7 password: <%= ENV.fetch('MYSQL_ROOT_PASSWORD', '') %> 8 # socket: /var/lib/mysql/mysql.sock 9 # socket: /var/run/mysqld/mysqld.sock 10 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 指定して接続するやり方もあるっぽい。
回答1件
あなたの回答
tips
プレビュー