docker compose 中的 Docker postgres 数据库无法正确初始化,Spring 应用程序无法连接到它们

问题描述 投票:0回答:1

我有

docker-compose.yml
:

services:
  belt-microservice:
    build: belt-microservices
    container_name: belt-microservice
    restart: always
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db-belt:5432/belt_microservices
    ports:
      - "8080:8080"
    depends_on:
      - db-belt
  crossbelt-microservice:
    build: crossbelt-microservices
    container_name: crossbelt-microservice
    restart: always
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db-crossbelt:5432/crossbelt_microservices
      - BELT_URL=http://belt-microservice:8080
    ports:
      - "8082:8082"
    depends_on:
      - db-crossbelt
      - belt-microservice
  report-microservice:
    build: report-microservices
    container_name: report-microservice
    restart: always
    ports:
      - "8083:8083"
  db-belt:
    image: postgres
    container_name: db-belt
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=belt-microservices
      - PGDATA=/var/lib/postgresql/data/pgdata
    ports:
      - "5000:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always
  db-crossbelt:
    image: postgres
    container_name: db-crossbelt
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=crossbelt-microservices
      - PGDATA=/var/lib/postgresql/data/pgdata
    ports:
      - "5001:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

我的解决方案基于Docker Compose + Spring Boot + Postgres连接,根据我上一个问题的评论在oracle openjdk docker容器中拒绝从spring boot到postgresql的连接

5项服务:

  • 3 个 Spring Boot 应用程序:
    • belt 微服务依赖于数据库 db_microservices
    • crossbelt 微服务依赖于前述的 Belt 微服务和 db_crossbelt
    • 报告微服务
  • 2 基于postgres的数据库服务:
    • db 皮带
    • db 交叉带

Belt 微服务具有

application.yml
:

server:
  port: 8080
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://0.0.0.0:5432/belt_microservices
    username: postgres
    password: password

另一个微服务,crossbelt 微服务具有

application.yml
:

server:
  port: 8082
belt-service-url: ${BELT_URL=http://localhost:8080}
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/crossbelt_microservices
    username: postgres
    password: password

根据另一个问题的答案,我假设

spring.datasource.url
将被
SPRING_DATASOURCE_URL
中设置的环境变量
docker-compose.yml
覆盖。

我假设在数据库服务的配置中设置

POSTGRES_DB
环境变量,他们会将其中的数据库重命名为给定的名称。根据问题的答案docker和docker-compose中的多个数据库我认为为我的微服务拥有单独的数据库是一个好方法。

现在的问题是,在使用

docker compose
设置它时,我得到

crossbelt-microservice: org.postgresql.util.PSQLException: FATAL: database "crossbelt_microservices" does not exist

但是后来我在服务配置中将

crossbelt-microservices
更改为
crossbelt_microservices
,再次运行后我得到了

db-crossbelt            | 
db-crossbelt            | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-crossbelt            | 
db-belt                 | 
db-belt                 | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-belt                 | 

以及 Spring 应用程序容器中的相同连接问题。

容器出现问题,如何解决?

postgresql spring-boot docker docker-compose
1个回答
0
投票

我想我正在前进。

我删除了该卷 与 postgresql 数据相关。我想您可以使用

docker volume ls
docker volume rm <volume name>
执行相同的操作。然后我重新运行它,将数据库名称更改为下划线,现在我遇到了另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.