前提・実現したいこと
以下の記事を参考にDocker composeのECSデプロイを試みました。
【Docker × ECS入門】docker compose upでECSデプロイ
デプロイまでにざっくり以下のことをしました。
- ecrレポジトリを2つ作成し、レポジトリ1にweb、レポジトリ2にdbというイメージをプッシュ
- それぞれのレポジトリのURLをコピーし、docker-compose.ymlのwebおよびdbコンテナ、それぞれのimageの項目に貼り付ける
- AWS contextを作成し、そのcontextに切り替える
- docker compose upを叩く
docker compose up後、docker compose psを叩くとwebコンテナとdbコンテナがそれぞれ以下のように表示されます。
表示されているwebコンテナのPORTSにアクセスしたところ、以下のエラーが表示されました。
発生している問題・エラーメッセージ
関連のありそうなコード
docker-compose.yml
version: '3' services: db: image: 875184864877.dkr.ecr.ap-northeast-1.amazonaws.com/mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 本当は直書きしています MYSQL_DATABASE: root ports: - "3306:3306" # volumes: # - /var/lib/mysql web: build: . image: 875184864877.dkr.ecr.ap-northeast-1.amazonaws.com/komarigoto-hiroba-web:latest command: rails s -p 3000 -b '0.0.0.0' # volumes: # - .:/myapp # - /app/tmp ports: - "3000:3000" depends_on: - db stdin_open: true tty: true
database.yml
# MySQL. Versions 5.5.8 and up are supported. # # Install the MySQL driver # gem install mysql2 # # Ensure the MySQL gem is defined in your Gemfile # gem 'mysql2' # # And be sure to use new-style password hashing: # https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html # default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: 本当は直書きしています host: db # docker-compose.ymlのservice名 development: <<: *default database: myapp_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: myapp_test # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password as a unix environment variable when you boot # the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full rundown on how to provide these environment variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %> # production: <<: *default database: myapp_production username: root password: 本当は直書きしています url: komar-LoadB-15YNT0NF1Z23W-0852457b57252813.elb.us-east-1.amazonaws.com:3306
Dockerfile
FROM ruby:2.7.1 # 必要なパッケージのインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs # yarnパッケージ管理ツールをインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install nodejs # chromeのインストール RUN apt-get update && apt-get install -y unzip && \ CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ unzip ~/chromedriver_linux64.zip -d ~/ && \ rm ~/chromedriver_linux64.zip && \ chown root:root ~/chromedriver && \ chmod 755 ~/chromedriver && \ mv ~/chromedriver /usr/bin/chromedriver && \ sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ apt-get update && apt-get install -y google-chrome-stable # 作業ディレクトリの作成、設定 RUN mkdir /myapp ##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照 ENV APP_ROOT /myapp WORKDIR $APP_ROOT # ホスト側(ローカル)のGemfileを追加する(ローカルのGemfileは【3】で作成) ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock # Gemfileのbundle install RUN bundle install ADD . $APP_ROOT
試したこと
「database.ymlのproductionのURLの項目に、docker compose psで表示されたDBコンテナのURLを記載すると良い」のようなことが書いてあるページを見つけたためそうしましたが、何も変わりませんでした、、、
またおそらく以下のページは似たような状況でエラーが解決された例と思いますが、具体的にどのようにして対応したかを読み取ることができなかったため、役立てることができていません・・・
ECSとRDSを用いたデプロイの際に起きたMysql2::Error::ConnectionError Unknown MySQL server host 'db' (-2)
補足情報(FW/ツールのバージョンなど)
MAC OS
MySQL 5.7
Ruby 2.7.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/04 02:05
2021/04/05 02:15
2021/04/08 11:20