⛳
Dockerで構築したPostgresに接続しようとしたらエラーが出た
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