Как подключить фастапи приложение к бд постгресс в докере?
уже третий день не могу решить проблему. Я написал fastapi приложение и решил запихнуть его в контейнер для удобства деплоя. Там же (в контейнере) я развернул бд Postgres, но приложение Fastapi не может подключиться к бд, уже не знаю что делать, перерыл весь интернет.
Докер-композ:
version: "3.9"
services:
db:
container_name: db
ports:
- "5438:5432"
environment:
- POSTGRES_PASSWORD=root
- POSTGRES_USER=admin
image: postgres:13.9-alpine3.17
fastapi:
build: ./app
depends_on:
- db
command: uvicorn main:app --reload --host 0.0.0.0
volumes:
- ./app:/app
expose:
- 8000
nginx:
image: nginx:1.19.8-alpine
depends_on:
- fastapi
ports:
- "80:80"
volumes:
- ./nginx-conf.d:/etc/nginx/conf.d
Файл окружения с подключением:
database-connect-addres = postgresql://admin:root@localhost:5438
Докер:
FROM python:3
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
Ошибка:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "localhost" (127.0.0.1), port 5438 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (::1), port 5438 failed: Cannot assign requested address
Is the server running on that host and accepting TCP/IP connections?
Ответы (2 шт):
Автор решения: eri
→ Ссылка
postgresql://admin:root@db:5432
У контейнера свой отдельный локалхост. Да и не мучай хост систему лишними пробросами. Подключайся напрямую и убери пробросы 8000 и 5458
Автор решения: Aliaksandr
→ Ссылка
Удалось ли решить вопрос? Столкнулся с такой же проблемой. Мне помогло следующее:
- Удалить базу данных, установленную локально в систему (освободить порт 5432), порты заменить на "5432:5432"
- В адресе подключения к базе данных исправить localhost на название контейнера: postgresql://admin:root@db:5432