我有
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项服务:
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 应用程序容器中的相同连接问题。
容器出现问题,如何解决?