Dockerで構築したPostgresに接続しようとしたらエラーが出た

2022/10/20に公開

docker-composeでfastapi + postgresで環境構築していたときのエラーです。
エラーは下記のようなものでした。

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "127.0.0.1", port 5432 failed: Connection refused
	Is the server running on that host and accepting TCP/IP connections?

127.0.0.1:5432とコネクトできないよ!
ということらしい。

特にいじっていないのでポートが解放されていないということはないだろうが一応確認

# netstat -an tcp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.11:40999        0.0.0.0:*               LISTEN      
tcp        0      0 :::5432                 :::*                    LISTEN      

どう見ても接続できそう。。。

色々調べたが結局原因は単純でした。

原因: Dockerコンテナへのアクセスは127.0.0.1ではない

docker-composeで立てたコンテナから別のコンテナへのアクセスはlocalhostではできないみたい。
代わりにコンテナ名を指定することでアクセスができるようになった。

database.py

DATABASE_URL = "postgresql://postgres:postgres@localhost:5432/test"

を↓に変更した。(postgres_db_1の部分はDBのコンテナ名)

DATABASE_URL = "postgresql://postgres:postgres@postgres_db_1:5432/test"

Discussion