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

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

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1023閲覧

Docker composeのECSデプロイ後エンドポイントにアクセスをしたが「Unknown database ...」というエラーが出る

hitoyasablue

総合スコア8

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/04/03 08:30

前提・実現したいこと

以下の記事を参考に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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーをよく見てください。
NoDatabaseErrorなので、コンテナを起動しただけでデータベースを作成してないんじゃないですか?
参照している記事はエラーの内容が違います。

投稿2021/04/03 16:16

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hitoyasablue

2021/04/04 02:05

コメントいただきありがとうございます。 ご指摘の通り作成しておりませんでした、、、 RDSなどで作成し、そのデータベースとECSのコンテナを紐付ける、というイメージでしょうか?
yu_1985

2021/04/05 02:15

RDSを使うならMySQLのコンテナは不要でしょう。 今回の目的がわかりませんが、データを永続化したいならRDSを使うのが最も無難です。 MySQL Serverをコンテナで作成する場合、ボリュームアタッチしてどこかにMySQLの実態のデータを保存しておかないと、コンテナを落としたときにデータが全部消えます。
hitoyasablue

2021/04/08 11:20

なるほど、ありがとうございます!RDSを使用したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問