Docker: Springboot container can not connect to PostgreSql Container Connection error

前端 未结 3 659
面向向阳花
面向向阳花 2020-12-11 09:33

I am building my first Springboot 2.0 application. I am trying to put my Springboot application into one docker container and my PostgresDB into another container.

相关标签:
3条回答
  • 2020-12-11 09:40

    You're missing networking configuration in your docker-compose.yml specification. By using "networks" you can effectively communicate between containers by their service name (using dns, the service name as the hostname).

    Here is an updated docker-compose.yml:

    version: "2.1"
    
    services:
      springboot-api-demo:
        image: "fw/springboot-api-demo"
        mem_limit: 1024m
        ports:
          - "8080:8080"
        environment:
          - SPRING_PROFILES_ACTIVE=local
          - AWS_REGION=local
          - ENVIRONMENT=local
          - AUTH_ENABLED=false
        networks:
          - mynet
    
      postgres:
        container_name: pgdb
        image: postgres:9.6-alpine
        environment:
        - 'POSTGRES_ROOT_PASSWORD=postgres'
        - 'POSTGRES_USER=postgres'
        - 'POSTGRES_PASSWORD=postgres'
        ports:
        - "54321:5432"
        networks:
        - mynet
    
    networks:
      mynet:
        driver: bridge
    

    Your database url should look like spring.datasource.url=jdbc:postgresql://postgres:5432/java_learning (notice the hostname, postgres, is equal to that of the service name.

    0 讨论(0)
  • 2020-12-11 09:57

    Try with :

    spring.datasource.url= jdbc:postgresql://pgdb:5432/java_learning
    

    The postgres database is not running on localhost, it's running in the other container which has an other IP (yet unknown).

    Thanksfully, docker-compose automatically create a network shared among all the containers in the docker-compose.yml (unless explicitly said to do not), as a result you can magically use the service name as an hostname.

    Also, you have a typo in the port, Postgres use 5432 by default, not 54321

    0 讨论(0)
  • 2020-12-11 09:57

    You are pointing your application towards localhost, but this is not shared between containers.

    To access another container you have to refer to its hostname.

    you should use the following datasource url:

    spring.datasource.url=jdbc:postgresql://pgdb:5432/java_learning
    

    See this simple tutorial about connecting to a container from another container with docker compose: https://docs.docker.com/compose/gettingstarted/

    0 讨论(0)
提交回复
热议问题