[Laravel][Docker]DBコンテナが正常に立ち上がっているのにLaravel側で接続できない場合の対処法


正常にDBコンテナは動いているのにLaravelでは接続できない!

結構この罠に引っかかる人多いんじゃないかなと思って書きました。

環境

Laravel8
docker-compose 3.8

エラー(Laravel)

SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432?

直接DBには接続できる

解決策

Laravelのデフォルトのdbホストが127.0.0.1になっています。
dbクライアント(tableplus)で繋がるんだから、なんかこれでいけそうな気がするんですけど、無理です。
→理屈は分からないのでわかる方教えてくだせえ!

env

$ docker-compose ps
      Name                     Command               State            Ports         
------------------------------------------------------------------------------------
api_project_app_1   docker-php-entrypoint php-fpm    Up      0.0.0.0:19000->9000/tcp
api_project_db_1    docker-entrypoint.sh postg ...   Up      0.0.0.0:5432->5432/tcp 
api_project_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp   

DBコンテナのホスト名をLaravelの.envに。

DB_HOST=127.0.0.1

DB_HOST=api_project_db_1

これでいけます