開発環境(Docker-compose)では問題ないが、本番環境でMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)がでてデプロイ(Capistrano)できない
プログラミング学習を始めて2ヶ月の初学者です!
勉強のためにDockerを構築し、ローカルでは問題なく表示できていたのですが、デプロイに苦戦しています;
本番環境
Rails6
amazon linux2
EC2
Nginx
Unicorn
mariaDB
問題
・Capistrano3でデプロイ((bundle exec cap production deploy))するとMysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)のエラーが出てデプロイできない。
・Docker導入前は問題なくデプロイできていた。
コード
dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs
RUN mkdir /myapp
ENV APP_ROOT /myapp
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . $APP_ROOT
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'password'
MYSQL_DATABASE: root
ports:
- "4306:3306"
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
socket: /tmp/mysql.sock
host: db
ports: 3306
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
database: myapp_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
仮説
エラー分そのままに、databaseが見つからない(host'db'がみつからない)
試したこと
・docker-composeの再ビルド
・docker-compose exec web rails db:create
・docker-compose exec web rails db:migrate
・EC2インスタンスから再起動
・database.ymlのdefaultにports: 3306を記述
・host'db'をhost'localhost'にしてみる
mariaDBを使っていてもimageがmysqlでも互換性があるので問題ないと思いますし、volumesは永続化になることですので、本番環境ではデータはEC2にあるから今回の本質的な問題ではないのでは・・・?と混乱しています;
基礎的なことかもしれませんがまだまだ応用できず、解決の糸口が見つかりません。
どうぞよろしくお願いいたします!m(_ _)m