🐳

[Serverless] localhost が connection refused になる

何度確認しても接続情報は間違っていない。でも connection refused になってしまう。


発生している現象

DB の接続情報を以下のようにして

local.yml
DB_USER: root
DB_PASSWORD: root
DB_HOST: localhost
DB_PORT: 3306
DB_NAME: default_db

Serverless でコードを実行すると

$ sls invoke local --stage local --useDocker

接続できない

connection refused.

ただ、コードを Serverless を通さずに実行する(今回は Golang なのでバイナリを直接実行する)と接続できる

どうやら Serverless ないし Docker を使っていることに問題があるらしい 🤔

解決策

DB_HOST の値を localhost から host.docker.internal に書き換える。

local.yml
- DB_HOST: localhost
+ DB_HOST: host.docker.internal

コンテナ内からホスト上の localhost に接続するには、localhost ではなく host.docker.internal を指定する必要がある。

ref: コンテナからホスト上のサービスに対して接続したい - Docker-docs-ja