Ошибка `connect ECONNREFUSED 127.0.0.1:5432` указывает на то, что попытка подключения к серверу PostgreSQL по адресу 127.0.0.1 (localhost) на порту 5432 не удалась, так как соединение было отклонено. Это обычно происходит, когда PostgreSQL не запущен на указанном хосте и порту или блокируется брандмауэром.
Чтобы исправить эту проблему и настроить контейнер для подключения к Postgres в Docker, нужно убедиться, что выполняются следующие шаги:
1. **Запуск PostgreSQL в Docker**. Убедитесь в том, что у вас запущен контейнер Docker с PostgreSQL, и что он настроен правильно. Пример команды для запуска контейнера с PostgreSQL:
```bash
docker run --name some-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=mydatabase \
-p 5432:5432 \
-d postgres
```
Эта команда создает новый контейнер с именем `some-postgres`, задает пароль для пользователя `postgres`, создает базу данных `mydatabase` и пробрасывает порт 5432 из контейнера на хостовую машину.
2. **Настройка параметров подключения в приложении**. Вам нужно обеспечить, чтобы ваше приложение пыталось подключиться к хосту, который указывает не на `localhost` с точки зрения контейнера, а на хост Docker или на другой сервис в том же Docker-сети. Для этого в настройках подключения к PostgreSQL (часто это строка подключения или конфигурационный файл) вместо `localhost` нужно использовать либо имя контейнера, либо `host.docker.internal` (для Docker на Mac или Windows), чтобы обратиться к хосту. Например:
```plaintext
postgresql://postgres:mysecretpassword@some-postgres:5432/mydatabase
```
или
```plaintext
postgresql://postgres:mysecretpassword@host.docker.internal:5432/mydatabase
```
3. **Проверка сети Docker**. Убедитесь, что приложение, которое должно подключиться к PostgreSQL, запущено в той же Docker сети, что и контейнер с PostgreSQL. Если они запущены в разных сетях, они не смогут видеть друг друга.
```bash
docker network ls
```
Для присоединения нового контейнера к существующей сети используйте параметр `--network` при запуске контейнера.
4. **Проверьте состояние контейнера PostgreSQL**. Используйте команду:
```bash
docker ps
```
Список должен показать запущенный контейнер с PostgreSQL.
5. **Логи PostgreSQL**. Проверьте логи PostgreSQL, чтобы убедиться, что нет ошибок при инициализации:
```bash
docker logs some-postgres
```
После выполнения указанных шагов, ваше приложение должно иметь возможность успешно подключаться к базе данных в Docker-кластере при запуске из определенной папки с помощью `npm run dev`. Убедитесь, что скрипт `dev`, указанный в вашем `package.json`, запускает ваше приложение с правильными переменными среды или параметрами, которые указывают на сервер PostgreSQL в Docker.