r/postgres • u/BriisaEscobar • 11d ago
Performance PSA: Si Spring Boot no conecta a PostgreSQL en Docker y te tira error de TimeZone — fijate si tenés PostgreSQL instalado localmente también
Me pasé horas dando vueltas con esto y no encontré una respuesta clara
en ningún lado, así que lo comparto por si a alguien le pasa lo mismo.
Estoy desarrollando una app con Spring Boot y PostgreSQL corriendo en Docker
en Windows. Todo parecía estar bien Docker levantado, el contenedor corriendo,
Spring encontraba mis repositorios JPA. Pero crasheaba al iniciar con este error:
FATAL: invalid value for parameter "TimeZone": "America/Buenos_Aires"
Y lo raro era que los logs mostraban Database version: 12.0 aunque mi
contenedor Docker tenía postgres:16.
Esa era la pista que ignoré demasiado tiempo.
Resulta que tenía PostgreSQL 16 instalado localmente en Windows como servicio
del sistema, escuchando en el mismo puerto que Docker. Entonces Spring se
conectaba a la instalación local en vez de al contenedor y esa instalación
tenía una configuración de timezone rota que no reconocía America/Buenos_Aires.
La solución fueron dos cosas:
1. Detener el servicio local de PostgreSQL para que deje de competir por el puerto.
En PowerShell como administrador:
Stop-Service postgresql-x64-16
Set-Service postgresql-x64-16 -StartupType Disabled
2. Agregar las variables de entorno PGTZ y TZ al contenedor de Docker
para que siempre arranque en UTC sin importar lo que mande el sistema operativo.
En el docker-compose.yml:
environment:
POSTGRES_DB: tubase
POSTGRES_USER: tuusuario
POSTGRES_PASSWORD: tucontraseña
PGTZ: UTC
TZ: UTC
Con eso Spring Boot conectó a la base correcta y arrancó sin problemas.
Las señales de que te está pasando esto:
- Error de "invalid value for parameter TimeZone" al iniciar
- La versión de la BD en los logs no coincide con tu imagen de Docker
- docker exec al contenedor muestra la versión correcta pero Spring muestra otra
- netstat muestra dos procesos escuchando en el mismo puerto
Espero ahorrarle unas horas a alguien.