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

后端 未结 4 1345
礼貌的吻别
礼貌的吻别 2021-02-06 10:10

I received the following error when trying to write session data using Tomcat\'s PersistentManager to a Postgres DB running on my local machine:

SEVERE: A SQL e         


        
相关标签:
4条回答
  • 2021-02-06 10:15

    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

    0 讨论(0)
  • 2021-02-06 10:21

    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/hosts
      192.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] ...
    

    0 讨论(0)
  • 2021-02-06 10:24

    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
    
    0 讨论(0)
  • 2021-02-06 10:31

    I had to expose port with -p 5432:5432:

    docker run --name postgres -e POSTGRES_PASSWORD=secret -d -p 5432:5432 postgres
    
    0 讨论(0)
提交回复
热议问题