Docker Guides

How do I connect to Postgresql running on host from Docker container

There could be instances where you want to connect to Postgresql database on the host from your containers. In this post, we take look at configuration steps on how to connect to Postgresql running on host from your Docker containers.

We are going to use Docker Compose tool to define and run multi-container applications. We would be defining compose configuration as YAML file for our application’s services/networks/volumes etc., and then with a single command, we can create and start all the services from the configuration.

Here are the key steps :

  1. Define Dockerfile for your app’s environment.
  2. Define docker-compose.yml for the services that make up your app services.
  3. Configure Postgresql to able to connect from Docker containers.
  4. Run docker-compose up and Compose starts and runs your entire app.

This quickstart assumes basic understanding of Docker concepts, please refer to earlier posts for understanding on Docker & how to install and containerize applications.

In the next section, we can look at how to define services in compose file for sample application with Angular as front end, Spring Boot as API, and for database as Postgres but this will be located on the host.

#1.Definition of Docker files

We have already defined below docker files in the previous posts herehere. Create a new project directory and copy all dockerfiles to this folder.

Angular Application Docker file

FROM httpd:2.4
#copy angular dist folder to container 
COPY dist/ /usr/local/apache2/htdocs/

#copy htaccess and httpd.conf to container
COPY .htaccess /usr/local/apache2/htdocs/
COPY httpd.conf /usr/local/apache2/conf/httpd.conf

#change permissions
RUN chmod -R 755 /usr/local/apache2/htdocs/

#expose port
EXPOSE 4200

Spring Boot API Docker file

FROM openjdk:8-jre
WORKDIR /
#add required jars
ADD spring-boot-rest-postgresql-0.0.1-SNAPSHOT.jar spring-boot-rest-postgresql-0.0.1-SNAPSHOT.jar

#expose port
EXPOSE 8080
#cmd to execute
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-boot-rest-postgresql-0.0.1-SNAPSHOT.jar"]

#2.Define services in Docker compose file

Create a file called docker-compose.yml in your project directory and paste the following:

version: '3'
services:
   ui:
    build:
      context: .
      dockerfile: UIDockerfile
    ports:
      - '4200:4200'
    networks:
      - samplenet
    links:
      - 'api:api'
  api:
   build:
     context: .
     dockerfile: AppDockerfile
   ports:
     - '8080:8080'
   networks:
    - samplenet
networks:
samplenet: null

 

Above compose file defines 2 services as below:

  • ui : This is for angular application,it uses an image that’s built from the UIDockerfile in the current directory and forwards the exposed port 4200 on the container to port 4200 on the host machine.
  • api : This is for spring boot application, it uses an image that’s built from the AppDockerfile in the current directory and forwards the exposed port 8080 on the container to port 8080 on the host machine.
  • All the above services uses samplenet network
  • depends_on denotes the service dependencies. When you start the services, compose would start the dependent services as well.
  • If you have noticed, we haven’t created service for Postgresql application instead we would be using Postgresql database installed on the host.
  • Also on your SpringBoot configuration (application.properties file) specify the external IP address of the database host like  spring.datasource.url=jdbc:postgresql://<IP Address>:5432/postgres

#3.Configure Postgresql to able to connect from Docker containers

Assuming Postgresql is already installed on the host machine, follow the below steps to configure the listen_addresses on postgresql.conf to accept all connections.

Image – Modify postgresql.conf

Also edit pg_hba.conf  file to add entry for the host connections like below

host        all         all          0.0.0.0/0           md5

Image – Add entries for host connections

#4.Build and run your app with Compose

Once you have completed the above configurations,next step is to start the application.In the current project directory, run docker-compose up .Compose pulls all the required Docker image, builds an image for your code, and starts the services you defined.

Image – Start containers using docker-compose up command
Image – Both containers are up

Congrats! today we have learned how to configure Postgresql running on the host to be able to connect from Docker containers.

Like this post? Don’t forget to share it!

Additional Resources:

 
Summary
Article Name
How do I connect to Postgresql running on host from Docker container
Description
In this post,we take look at configuration steps on how to connect to Postgresql running on host from your Docker containers.
Author
Publisher Name
Upnxtblog
Publisher Logo
Karthik

Allo! My name is Karthik,experienced IT professional.Upnxtblog covers key technology trends that impacts technology industry.This includes Cloud computing,Blockchain,Machine learning & AI,Best mobile apps, Best tools/open source libs etc.,I hope you would love it and you can be sure that each post is fantastic and will be worth your time.

Share
Published by
Karthik

Recent Posts

Finding the Right Time to Build Your Software Instead of Buy

There are few things as valuable to a business as well-designed software. Organizations today rely…

6 days ago

Innovators in Crypto: Prominent AI-Powered Coins

The cryptocurrency industry is being reshaped by the fusion of blockchain technology and artificial intelligence…

3 weeks ago

Top AI Design Tools Every Graphic Designer Should Use in 2024

Introduction Artificial Intelligence (AI) has also found its relevance in graphic design and is quickly…

2 months ago

Transforming Industries: The Integration of AI and Blockchain

Imagine a world where the brilliance of Artificial Intelligence (AI) meets the unbreakable security of…

2 months ago

How Can I Use Automation to Streamline My Digital Marketing Efforts?

In today’s fast-paced digital landscape, automation is not just a luxury but a necessity for…

2 months ago

Top 5 AI Technologies Transforming the Casino Gaming Landscape in 2025

The world of casino gaming has leveraged the emerging technology advancements to create immersive and…

3 months ago

This website uses cookies.