0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mysql2::Error: Can't connect to local MySQL server through socket

Posted at

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アプリを起動するようにしてあげる

方法:

  1. aws ecsのタスク定義からAPPコンテナの設定箇所にスタートアップの依存関係の順序を指定する。(条件はHealthyにする)
    スクリーンショット 2025-01-28 20.40.13.png
  2. DBコンテナのヘルスチェックを追加する(mysqlの起動ができたことを確認する)
    スクリーンショット 2025-01-28 20.42.04.png

上記を行い、再デプロイしたところ無事にAPPコンテナで rails db:create が成功するようになりました

殴り書きですみません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?