#postgresql #spring-boot #docker #docker-compose
#postgresql #весенняя загрузка #docker #docker-compose
Вопрос:
Моя база данных Postgres работает в контейнере Docker. При запуске контейнера сообщается, что он готов к прослушиванию на 5432. Мой контейнер приложения настроен на зависимость от него.
container_name: my_postgres_db
image: library/postgres:latest
network_mode: bridge
expose:
- 5432
ports:
- 5432:5432
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin
- POSTGRES_DB=localdb
restart: always
Конфигурация для приложения:
container_name: my_test_app
depends_on:
- db
build:
context: ./
dockerfile: Dockerfile
image: my_test_app
ports:
- 8080:8080
Основываясь на решениях подобных вопросов, я изменил localhost
URL-адрес в БД на:
spring.datasource.url=jdbc:postgresql://db:5432/localdb
Это вызывает другую ошибку = «Исключение неизвестного хоста». Даже если мне удастся создать приложение таким образом, оно все равно не работает. Журналы говорят, Connection to localhost:5432 refused
что еще мне не хватает? Почему он все еще слушает localhost:5432
, когда я, очевидно, изменил его на db:5432
и gradlew очищает / создает его?
Комментарии:
1. я предполагаю, что у вас есть проблемы с сетью, которую вы можете прочитать подробнее docs.docker.com/compose/networking и исправьте это, добавив сети вместо того, чтобы раскрывать порт
Ответ №1:
просто измените network_mode
в postgres и app на host
network_mode: host
обратите внимание, что при этом будет игнорироваться параметр expose и будет использоваться сеть хоста и сеть контейнеров
Комментарии:
1. Большое вам спасибо! Это сделало свое дело. Я установил как ‘app’, так и ‘db’ network_mode в docker-compose.yml для размещения. Я отмечаю ваш ответ как решение.