Однією з найпоширеніших проблем у розробці програмного забезпечення є з’єднання з базою даних. Ця проблема особливо актуальна при роботі з Docker та Spring Boot, де конфігурація середовища може викликати незрозумілі проблеми. У цій статті ми розглянемо одну з таких проблем – помилку
1 |
org.postgresql.util.PSQLException: Connection to localhost:5432 refused |
при спробі з’єднатися з базою даних PostgreSQL у Spring Boot за допомогою Docker.
Щоб зрозуміти причину цієї помилки, необхідно розібратися у тому, як працює Docker і як він управляє мережами. При створенні контейнерів Docker вони отримують свій власний мережевий стек, включаючи власну IP-адресу і інші мережеві параметри. Це означає, що контейнери можуть бачити один одного за допомогою їхніх імен служб, а не за допомогою localhost або IP-адреси хоста. У випадку з додатком Spring Boot, який працює в контейнері, спроба з’єднатися з базою даних за адресою localhost буде спрямована на сам контейнер, а не на контейнер бази даних.
Отже, для вирішення цієї проблеми необхідно замінити адресу localhost на ім’я служби, яке використовується у docker-compose.yml для бази даних PostgreSQL. Це дозволить Spring Boot додатку знаходити базу даних у мережі Docker. Після внесення цих змін у конфігураційні файли та перезапуску додатку, з’єднання з базою даних повинно бути успішним, а помилка
1 |
org.postgresql.util.PSQLException: Connection to localhost:5432 refused |
більше не повинна виникати.
Пропоноване рішення може бути реалізоване в декілька кроків:
1 |
docker-compose up -d |
Ці кроки допоможуть уникнути помилки з’єднання з базою даних PostgreSQL у Spring Boot за допомогою Docker і забезпечать успішну роботу вашого додатку.