はじめに
dial tcp 127.0.0.1:3306: connect: connection refused
というエラーがDockerで立てたMySQLコンテナにバックエンドから登録処理をしようとした時に出ました。
どうやらlocalhostのポート番号3306へのアクセスが拒否されているようです。
今回、docker-compose.ymlでGoのバックエンドコンテナとMySQLコンテナが立ち上がるようにしています。
原因
バックエンドの.env
を以下のように記述してしました。
.env
MYSQL_HOST=127.0.0.1 # ここが原因
MYSQL_PORT=3306
MYSQL_USER=your_user
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
.env
ファイルを見てみるとMySQL_HOST
に127.0.0.1
と書いていました。
バックエンドもコンテナで立てているので、コンテナ間通信ではdocker-compose.yml
で定義したコンテナ名を指定する必要がありました。
解決方法
.env
MYSQL_HOST=your_mysql # ここをdocker-compose.ymlのコンテナ名にする
MYSQL_PORT=3306
MYSQL_USER=your_user
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
127.0.0.1
ではなくdocker-compose.yml
で書いたコンテナ名にすることでエラー解決することができました。
.env
を変更した後は、コンテナを立ち上げ直すのを忘れないようにしましょう。
補足説明:
- Docker環境では、各コンテナは独立した環境として動作します。
-
127.0.0.1
やlocalhost
は自分自身、つまりそのコンテナ自身を指すため、別のコンテナのMySQLには接続できなかったようです。
さいごに
この記事が誰かの役に立てば幸いです。