我创建了一个 docker-comose 文件,其中包含有关数据库和微服务的所有强制信息,并且在运行 docker compose up 命令后,即使我的数据库映像运行成功,我的微服务实例也无法与它们连接并返回通信链接错误,我尝试了很多方法,但错误仍然存在。
请从下面的代码中提出更好的方法:
common.config.yml
services:
network-deploy-service:
networks:
- xyz
microservice-db-config:
extends:
service: network-deploy-service
image: mysql
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
timeout: 10s
retries: 10
interval: 10s
start_period: 10s
environment:
MYSQL_ROOT_PASSWORD: root
microservice-base-config:
extends:
service: network-deploy-service
deploy:
resources:
limits:
memory: 700m
docker-compose.yml
services:
accountsdb:
container_name: accountsdb
ports:
- 3307:3306
environment:
MYSQL_DATABASE: accountsdb
extends:
file: common-config.yml
service: microservice-db-config
loansdb:
container_name: loansdb
ports:
- 3308:3306
environment:
MYSQL_DATABASE: loansdb
extends:
file: common-config.yml
service: microservice-db-config
cardsdb:
container_name: cardsdb
ports:
- 3309:3306
environment:
MYSQL_DATABASE: cardsdb
extends:
file: common-config.yml
service: microservice-db-config
accounts:
image: "xyz/accounts"
container_name: accounts-ms
ports:
- "8080:8080"
environment:
SPRING_APPLICATION_NAME: "accounts"
SPRING_DATASOURCE_URL: "jdbc:mysql://accountsdb:3306/accountsdb"
depends_on:
accountsdb:
condition: service_healthy
loans:
image: "xyz/loans"
container_name: loans-ms
ports:
- "8090:8090"
environment:
SPRING_APPLICATION_NAME: "loans"
SPRING_DATASOURCE_URL: "jdbc:mysql://loansdb:3306/loansdb"
depends_on:
loansdb:
condition: service_healthy
cards:
image: "xyz/cards"
container_name: cards-ms
ports:
- "9000:9000"
environment:
SPRING_APPLICATION_NAME: "cards"
SPRING_DATASOURCE_URL: "jdbc:mysql://cardsdb:3306/cardsdb"
depends_on:
cardsdb:
condition: service_healthy
networks:
xyz:
driver: "bridge"
您的数据库位于
xyz
网络上,但您的应用程序容器不在。我不认为定义自己的网络比使用 compose 创建的默认桥接网络有任何好处,因此我只需删除 xyz
网络并为所有容器使用默认网络。
所以而不是
microservice-db-config:
extends:
service: network-deploy-service
image: mysql
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
timeout: 10s
retries: 10
interval: 10s
start_period: 10s
environment:
MYSQL_ROOT_PASSWORD: root
只需使用
microservice-db-config:
image: mysql
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
timeout: 10s
retries: 10
interval: 10s
start_period: 10s
environment:
MYSQL_ROOT_PASSWORD: root