I’m trying to connect a spring application to a postgres container using docker compose
but I always get this errors:
If I use the container name postgres
, this error shows up:
java.net.UnknownHostException: postgres
If I try to use “localhost”, a connection refused shows up:
java.net.ConnectException: Connection refused
What else is missing on my configuration?
These are my spring configs:
<code>spring.datasource.url=jdbc:postgresql://localhost:5432/fastfood
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
</code>
<code>spring.datasource.url=jdbc:postgresql://localhost:5432/fastfood
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
</code>
spring.datasource.url=jdbc:postgresql://localhost:5432/fastfood
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
The docker-compose file:
<code>version: '3.7'
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "fastfood"
ports:
- "5432:5432"
networks:
- postgres
restart: always
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8081:8080"
volumes:
- .:/app
depends_on:
- db
networks:
postgres:
driver: bridge
</code>
<code>version: '3.7'
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "fastfood"
ports:
- "5432:5432"
networks:
- postgres
restart: always
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8081:8080"
volumes:
- .:/app
depends_on:
- db
networks:
postgres:
driver: bridge
</code>
version: '3.7'
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "fastfood"
ports:
- "5432:5432"
networks:
- postgres
restart: always
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8081:8080"
volumes:
- .:/app
depends_on:
- db
networks:
postgres:
driver: bridge
The Dockerfile:
<code>FROM openjdk:21-jdk
VOLUME /tmp
RUN mkdir /work
COPY . /work
WORKDIR /work
RUN chmod +x ./mvnw
RUN ./mvnw clean package
EXPOSE 8080
RUN mv /work/build/libs/*.jar /work/app.jar
ENTRYPOINT ["java", "-jar", "/work/app.jar"]
</code>
<code>FROM openjdk:21-jdk
VOLUME /tmp
RUN mkdir /work
COPY . /work
WORKDIR /work
RUN chmod +x ./mvnw
RUN ./mvnw clean package
EXPOSE 8080
RUN mv /work/build/libs/*.jar /work/app.jar
ENTRYPOINT ["java", "-jar", "/work/app.jar"]
</code>
FROM openjdk:21-jdk
VOLUME /tmp
RUN mkdir /work
COPY . /work
WORKDIR /work
RUN chmod +x ./mvnw
RUN ./mvnw clean package
EXPOSE 8080
RUN mv /work/build/libs/*.jar /work/app.jar
ENTRYPOINT ["java", "-jar", "/work/app.jar"]