Dhanraj
Dhanraj

Reputation: 1302

Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections

Here my DockerFile :-

FROM openjdk:10
ENV AQUILA_HOME /data/config
#USER root
#VOLUME /tmp
ADD a2i-web-1.0.0-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","app.jar"]

My jar is spring boot application which requires postgres. I installed portgres locally and it is successfully runnning on my localhost. I am building DockerFile successfully by command

sudo docker build -t djtijare/a2i-web:v1 .

But while running it by command

sudo docker run -p 8080:8080 -t djtijare/a2i-web:v1

giving exception as :

Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

I am running this docker command from directory containing DockerFile and my jar Do I need to set any configuration to run postgres?

Upvotes: 7

Views: 18773

Answers (2)

questionto42
questionto42

Reputation: 9532

What does the error mean?

For those who came here for the error, and not for the docker problem:

You get this error when psql is not installed (or cannot be reached).

Since you did install it in your localhost, the docker container is unable to reach the localhost with the settings. This is nothing new, the other answer is years old, just making clearer what the error itself means.

PS

I had the same error in DBeaver when I thought that DBeaver would install the PostgreSQL database driver as soon as I make a connection. Turns out that you have to install psql yourself, make a host in pgAdmin 4 or in the console, and then, you can reach it from DBeaver.

Upvotes: 1

atline
atline

Reputation: 31574

You can't access service which on the host using localhost from container, you had to use the ip address of your host to access.

This because: default docker will use bridge which will setup a internal network for your container, so when container use localhost, it doesn't mean the host, it mean the container self's network.

If insist on, a ugly solution is use --net=host.

Something like next:

sudo docker run --net=host -p 8080:8080 -t djtijare/a2i-web:v1

Then you can use localhost to visit host's service from container.

Upvotes: 7

Related Questions