前提
ローカルのMacOSで、Docker Desktop for Macを使用しDockerコンテナを立ち上げ、その上にRailsアプリを作成したいと考えています。構成は、Docker + Rails6 + MySQL5.7.29です。
分からないこと
コンテナ内に入り込みrails new
したのち、rails db:create
を実行すると、以下のように警告やエラーが出力されます。以下4行目にUnknown MySQL server host 'db' (-2)
という記載が出ており、これがエラーの原因であると考えています。「dbという名前のMySQLサーバホストが分からない」と言われています。下記に掲載しておりますが、
Bash
1Warning: the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.1.4`. 2/usr/local/bundle/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call 3/usr/local/bundle/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here 4Unknown MySQL server host 'db' (-2) 5Couldn't create 'phase2_development' database. Please check your configuration. 6rails aborted! 7Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (-2) 8/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect' 9/usr/local/bundle/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize' 10/usr/local/bundle/gems/activerecord- 11・ 12・ 13・ 14(以下一部省略) 15・ 16・ 17・ 18bin/rails:3:in `load' 19bin/rails:3:in `<main>' 20Tasks: TOP => db:create 21(See full trace by running task with --trace)
Dockerfile
1FROM ruby:2.7.0 2 3ENV LANG C.UTF-8 4ENV APP_ROOT /usr/src 5 6WORKDIR $APP_ROOT 7 8RUN set -ex && \ 9 apt-get update -qq && \ 10 apt-get install -y sudo && \ 11 : "Install node.js" && \ 12 curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && \ 13 apt-get update -qq && \ 14 apt-get install -y nodejs && \ 15 : "Install yarn" && \ 16 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ 17 echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ 18 apt-get update -qq && \ 19 apt-get install -y yarn && \ 20 : "Install rails6.X latest version" && \ 21 gem install rails --version="~>6.0.0" 22
以下わかりやすくファイル名の部分にdockerCompose
と記載しましたが、本当はrailsアプリdocker-compose.ymlです。
dockerCompose
1version: '3' 2services: 3 db: 4 image: mysql:5.7.29 5 container_name: rails_mysql 6 ports: 7 - "3306:3306" 8 environment: 9 MYSQL_ROOT_PASSWORD: root 10 MYSQL_PASSWORD: password 11 TZ: 'Asia/Tokyo' 12 command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_ja_0900_as_cs 13 14 web: 15 build: . 16 container_name: rails_web 17 volumes: 18 - .:/usr/src 19 ports: 20 - "3000:3000" 21 environment: 22 PORT: 3000 23 BINDING: 0.0.0.0 24 stdin_open: true 25 tty: true 26 links: 27 - db 28 restart: unless-stopped # to wait mysql up :(
以下わかりやすくファイル名の部分database
と記載しましたが、本当はrailsアプリ/config/database.ymlです。
database
1default: &default 2 adapter: mysql2 3 encoding: utf8mb4 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: 7 socket: /tmp/mysql.sock 8 9development: 10 <<: *default 11 database: phase2_development 12 13test: 14 <<: *default 15 database: phase2_test 16 17production: 18 <<: *default 19 database: phase2_production 20 username: phase2 21 password: <%= ENV['PHASE2_DATABASE_PASSWORD'] %> 22
自分で調査した内容
以下調査した内容3件実施しました。いずれも私と同様にエラーが出ているようです。ここで記載された内容を実施してみましたが、結果が変わらないため、ここで質問させていただきました。
- dockerで立てたrailsのコンテナからmysqlのコンテナに接続できない
- Docker — docker コンテナの中で vim が使えない場合
- docker・Rails・MySQLを使った時に出たUnknown MySQL server host 'localhost'
環境情報
- Ruby 2.7
- Rails: 6.0.2.2
- ホストOS: MacOS Catalina 10.15.4
- docker: 19.03.8
- docker-compose: 1.25.4
参考資料
以下の手順を使用して、実施しています。ただし、MySQLのバージョンは5.7.29を使用しています。
Docker + Rails6 + MySQL8.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。