Solución:
Cada contenedor tiene su propia interfaz de red con su propio localhost. Entonces, cambie la forma en que Java apunta a Postgres:
spring.datasource.url=jdbc:postgresql://localhost:5432/sample
Para:
spring.datasource.url=jdbc:postgresql://db:5432/sample
db
se resolverá en la IP de Postgres adecuada.
Prima. Con docker-compose no necesita crear su imagen a mano. Así que cambia:
web:
image: myuser/manager:latest
Para:
web:
build: .
Tuve el mismo problema y perdí algo de tiempo para entender y resolver este problema:
org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
Muestro todas las propiedades para que todo el mundo entienda.
application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL82Dialect
spring.jpa.hibernate.ddl-auto=update
docker-compose.yml:
version: "3"
services:
springapp:
build: .
container_name: springapp
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
ports:
- 8000:8080
restart: always
depends_on:
- db
db:
image: postgres
container_name: db
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=testdb
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- 5000:5432
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
Para iniciar la aplicación de primavera con la base de datos local, usamos url localhost.
Para conectarnos al contenedor con la base de datos, necesitamos cambiar ‘localhost’ en su servicio de base de datos, en mi caso ‘localhost‘ para ‘db‘.
Solución: agregar SPRING_DATASOURCE_URL
medio ambiente en docker-compose.yml
que reescribir spring.datasource.url
valor para conectar:
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
Espero que esto ayude a alguien a ahorrar su tiempo.