awsのecsを利用して、コンテナ間通信でmysqlへアクセスしようとしたところ事象が発生
タスク内のコンテナ:
DBコンテナ(Mysql)、APPコンテナ(Rails)
エラー内容:
APPコンテナを起動する際、entrypoint.shにて rails db:create をしようとしたところエラー
結論:
DBコンテナの起動をした後、コンテナ内のMysqlサーバが起動する前に、Railsアプリの初期化処理(rails db:createなど)が動いていたことで、エラーが発生(mysqlが起動する前にRailsがソケットファイルを利用してmysqlへ接続しようとしていた)
前提条件:
database.ymlのソケットファイル名およびホスト名を正しいものを設定しておく
ソケットファイル名はDBコンテナにログインして確認。ホスト名はAPPコンテナにログインし、ローカル環境でDBにアクセス可能なポートが入っているIPまたはホスト名を指定(今回は 127.0.0.1 を指定)
やること:
dbコンテナの起動およびmysqlサーバが起動したことを確認してから(DBコンテナのヘルスチェックを行う)、railsアプリを起動するようにしてあげる
方法:
- aws ecsのタスク定義からAPPコンテナの設定箇所にスタートアップの依存関係の順序を指定する。(条件はHealthyにする)
- DBコンテナのヘルスチェックを追加する(mysqlの起動ができたことを確認する)
上記を行い、再デプロイしたところ無事にAPPコンテナで rails db:create が成功するようになりました
殴り書きですみません。