Using Docker to launch web app, can't connect to Postgresql DB? Using Docker to launch web app, can't connect to Postgresql DB? docker docker

Using Docker to launch web app, can't connect to Postgresql DB?


Why I can NOT connect to localhost:5432?

Cat your container's /etc/hosts

$ sudo docker exec -it [container] cat /etc/hosts

For docker networks is bridge by default, the localhost inside points to container itself(Docker default bridge network).Then you don't have 5432 listening in your container:

$ sudo docker exec [container] nc -v -z localhost 5432


Solution 1. If you wanna hardcode the "localhost:5432" inside your config xml, the easiest way is creating your container with the option "--net=host":

$ sudo docker run --net=host -it ...

Solution 2. Change the localhost of your docker host ip inside the container

  • Get your docker host ip
    $ sudo docker inspect -f '{{ .NetworkSettings.Gateway }}' 192.168.5.1
  • Enter your container:
    $ sudo docker exec -it [container] /bin/bash
  • Edit the file /etc/hosts to point the localhost to docker host ip:
    $ sudo vim /etc/hosts192.168.5.1 localhost

Solution 3. Modify your db config file to use an alias instead of localhost:

connectionURL="jdbc:postgresql://DB_ALIAS/admin?stringtype=unspecified"
Then add the DB_ALIAS to the container's hosts :
$ sudo docker run --add-host DB_ALIAS:192.168.5.1 -it [image] ...


If you are using docker-compose together with postgres image, than you can reuse service name as IP inside jdbc connection (here: app-db)

  web:    build: ./web    ports:      - "8080:8080"    links:      - app-db    environment:      - MYAPP_JDBC_URL=jdbc:postgresql://app-db:5432/somedb      - MYAPP_JDBC_USER=someuser      - MYAPP_JDBC_PASS=pass  app-db:    image: postgres:9.6    environment:      - POSTGRES_USER=someuser      - POSTGRES_PASSWORD=pass      - POSTGRES_DB=somedb    expose:      - 5432    volumes_from:      - app-db-data  app-db-data:    image: cogniteev/echo    command: echo 'Data Container for PostgreSQL'    volumes:      - /opt/postgresdata/:/var/lib/postgresql/data


I was getting the same error but this simple solution works perfect for me.
sudo docker run -d --net="host" -it <IMAGE> Now I can run my app https://x.x.x.x:pppp/../.. and everything works fine. I hope this helps