blue-sky
blue-sky

Reputation: 53796

Running Spring Boot docker instance with Postgres docker instance

I'm attempting to run a Spring Boot app that connects a Postgres DB using:

docker-compose.yml (for Postgres) :

  version: '3'
  services:
  postgres-db:
  container_name: postgres-db
  image: postgres:latest
  restart: always
  ports:
  - "5432:5432"
  environment:
  POSTGRES_USER: my_user
  POSTGRES_PASSWORD: my_password
  POSTGRES_DB: shorten-db

To run the Postgres DB:

docker-compose up

.Dockerfile (for the Spring Boot app) :

  FROM openjdk:12-jdk-alpine
  RUN addgroup -S spring && adduser -S spring -G spring
  USER spring:spring
  ARG JAR_FILE=target/*.jar
  COPY ${JAR_FILE} app.jar
  ENTRYPOINT ["java","-jar","/app.jar"]

In order to run the Spring app using Docker I use:

  mvn package
  
  docker build -t url-shorten/url-shorten-docker .
  
  docker run -p 8080:8080 url-shorten/url-shorten-docker

But I receive the error when starting when running above docker command:

Caused by: 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.

In Spring application.properties I connect to the DB using:

spring.datasource.url=jdbc:postgresql://localhost:5432/shorten-db

I think this error is due to the Spring Boot app is running in a different container to DB so it cannot find the DB on localhost. Is there an idiomatic way of connecting the Spring Book docker container to the DB container. Or do I have do access the IP address of my machine and use this address to connect to the Postgres DB running on Docker?

Upvotes: 1

Views: 108

Answers (3)

Igor Amelin
Igor Amelin

Reputation: 365

You can add both DB and app containers to one Docker network and change PostgreSQL host in datasource URL to postgres-db. Then Spring app will work with your DB.

Upvotes: 0

Nikolai  Shevchenko
Nikolai Shevchenko

Reputation: 7521

Yes, you can't use localhost in this situation

spring.datasource.url=jdbc:postgresql://postgres-db:5432/shorten-db

Upvotes: 1

Łukasz Olszewski
Łukasz Olszewski

Reputation: 915

In Spring application.properties, try to change DB config to:

spring.datasource.url=jdbc:postgresql://postgres-db:5432/shorten-db

In container networks, You need to use the container name as a host.

Upvotes: 1

Related Questions