Docker postgrsql 在春季启动时未连接

时间:2021-07-09 18:47:28

标签: postgresql docker

我使用过 docker-compose.yaml。我在 docker-compose.yml 中配置如下:

第 1 步:在 docker-compose.yaml 中,我使用以下代码

  services:
      postgres:
        image: postgres
        container_name: postgres
        hostname: postgres
        volumes:
          - db-data:/var/lib/postgresql/data
        restart: always
        ports:
          - 5432:5432
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: accountdb
          
      account-opening:
        image: ehaque95/pocv1-account-opening:0.0.1-SNAPSHOT
        mem_limit: 700m
        ports:
          - "8081:8081"
        networks:
          - account-network
        depends_on:  
          - postgres    
        environment:
          SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/accountdb

    volumes:
      db-data:

第 2 步:

我在 spring boot 中配置了 applicaiton.yml 如下:

    spring:
      datasource:
        url: jdbc:postgresql://postgres:5432/accountdb
        username: postgres
        password: postgres
        
      jpa:
        database-platform: org.hibernate.dialect.PostgreSQLDialect
        database: postgresql
        hibernate:
          ddl-auto: update
        properties:
          dialect: org.hibernate.dialect.PostgreSQLDialect

注意:postgresql 服务器 IP 经常变化。当我运行 docker inpspect 时,它会显示一些 "IPAddress": "172.19.0.2" 或有时 "IPAddress": "172.19.0.3"。它在我运行时显示 <再次强>docker-compose up。

它显示连接错误。我的代码连接到 postgresql 有什么问题。请帮帮我

2 个答案:

答案 0 :(得分:1)

要让两个容器相互通信,它们必须在同一个 Docker 网络上。 By default,Compose 创建一个名为 default 的网络并将容器附加到它;如果您为容器指定其他 networks:,则它们不会连接到 default 网络。

在您的 docker-compose.yml 中,account-opening 容器有一个 networks: 块,但 postgres 没有:

version: '3.8'
services:
  postgres:
    ...
    # no networks:, so implicitly
    # networks: [default]
  account-opening:
    ...
    networks: [account-network] # and not default
    # The postgres container is on the default network
    # This container is on account-network
    # And so this host name doesn't resolve
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/accountdb

使用 default 网络没有任何问题。对于大多数典型应用程序,您可以删除整个文件中的所有 networks: 块。然后将使用默认设置创建 default 网络,所有容器都将连接到该网络,并能够通过它们的 Compose 服务名称相互寻址。

答案 1 :(得分:-1)

试试

url: jdbc:postgresql://localhost:5432/accountopendb

如果您在数据源配置中的同一台机器上同时运行 spring 应用程序和 postgresql 容器。