正常に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