Проблема, с которой вы столкнулись, скорее всего связана с тем, что ваше приложение пытается подключиться к базе данных, используя `localhost`, что указывает на то, что оно ищет базу данных на самом контейнере приложения вместо того, чтобы подключаться к контейнеру PostgreSQL.
Вот несколько шагов и рекомендаций, которые могут помочь вам исправить ситуацию:
### 1. Измените адрес подключения
Убедитесь, что ваше приложение обращается к базе данных по имени сервиса в Docker Compose, а не по `localhost`. Если вы используете стандартный формат в Docker Compose, имя сервиса — это `db`. Например, если вы подключаетесь из вашего приложения, использование следующих параметров должно помочь:
- **Host:** `db` (имя сервиса из вашего docker-compose файла)
- **Порт:** `5432` (по умолчанию PostgreSQL использует этот порт, а не `5433`)
- **Пользователь:** используйте значение `POSTGRES_USER`, установленное в вашем `.env.local`
- **База данных:** используйте значение `POSTGRES_DB`, установленное в вашем `.env.local`
### 2. Проверьте настройки порта
В вашем Dockerfile и настройках у вас указан порт 5433, однако, по умолчанию PostgreSQL слушает на порту 5432. Если вы хотите использовать 5433, убедитесь, что он также указан и при конфигурации PostgreSQL, и в вашем приложении.
Если подключение должно происходить по порту 5432, вы можете удалить или установить правильный порт.
### 3. Проверка конфигурации
Убедитесь, что Docker запускает PostgreSQL с правильным конфигурационным файлом. В вашем `docker-compose.yml` в разделе `db`, у вас указана команда:
```yaml
command: postgres -c config_fil
```
Это может быть ошибкой, так как параметр `config_fil` выглядит неполным. Вам нужно указывать файл конфигурации следующим образом, если он существует:
```yaml
command: postgres -c config_file=/etc/postgresql/postgresql.conf
```
### 4. Логи PostgreSQL
Проверьте логи PostgreSQL, чтобы увидеть, какие ошибки или предупреждения могут быть связаны с подключениями. Можно получить доступ к логам с помощью команды:
```bash
docker logs db
```
### 5. Полный пример структуры
Вот пример, как может выглядеть ваш `docker-compose.yml` файл и часть `app`:
```yaml
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./app:/app
environment:
- ENV=dev
env_file:
- ./app/.env.local
ports:
- "8000:8000"
command: poetry run uvicorn index:app --reload --host 0.0.0.0 --port 8000
networks:
- proxy-net
depends_on:
- db
- redis
- rabbitmq
db:
container_name: db
image: postgres:13
restart: always
volumes:
- db_volume:/var/lib/postgresql/data/
environment:
POSTGRES_USER: your_user
POSTGRES_PASSWORD: your_password
POSTGRES_DB: your_db
command: postgres -c config_file=/etc/postgresql/postgresql.conf
networks:
- proxy-net
volumes:
db_volume:
```
### Заключение
После всех изменений не забудьте перезапустить ваши контейнеры. Вы можете сделать это с помощью следующей команды:
```bash
docker-compose down && docker-compose up --build
```
Попробуйте применить указанные рекомендации и проверьте, решает ли это вашу проблему. Если что-то не работает, пожалуйста, предоставьте дополнительные детали.