docker 配置一个服务在另一个服务启动后再启动,depends_on 服务间依赖编排
docker 配置一个服务在另一个服务启动后再启动,服务 A 启动后再启动服务 B,比如某些应用依赖 nacos 注册中心服务,应用服务依赖 gateway 网关服务,某些 RPC 场景依赖另一个服务启动
省流,通过 depends_on 配置来解决服务间依赖问题。实际开发中,nacos、redis、RPC、数据库等都会进行一定的重试或等待,但仍存在很多硬性依赖场景
以下配置文件表达:
gateway、service-A、service-B、service-C 全部依赖 redis 和 nacos 服务
service-A、service-B、service-C 依赖 gatewaty 网关服务
service-B 依赖 service-A 服务
service-B 服务最后启动
配置文件
复制
services:
redis:
container_name: redis
image: redis:7.2.4
restart: unless-stopped
ports:
- "6379:6379"
networks:
- test
nacos:
container_name: nacos
image: nacos/nacos-server:v2.3.2
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- MODE=standalone
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
networks:
- test
gateway:
container_name: gateway
build:
context: ./app-gateway
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
- redis
- nacos
environment:
- TZ=Asia/Shanghai
networks:
- test
service-A:
container_name: service-A
build:
context: ./service-A
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
- redis
- nacos
- gateway
environment:
- TZ=Asia/Shanghai
networks:
- test
service-B:
container_name: service-B
build:
context: ./service-B
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
- redis
- nacos
- gateway
- service-A
environment:
- TZ=Asia/Shanghai
networks:
- test
service-C:
container_name: service-C
build:
context: ./service-C
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
- redis
- nacos
- gateway
environment:
- TZ=Asia/Shanghai
networks:
- test
networks:
test:
服务启动顺序(自左往右)
gantt
title 服务启动顺序(自左往右)
dateFormat YYYY-MM-DD HH:mm:ss
section 基础设施
Redis :a1, 2025-04-10 00:00:00, 1m
Nacos :a2, 2025-04-10 00:00:00, 1m
section 服务启动
Gateway :b1, 2025-04-10 00:01:00, 1m
Service-A :b2, after b1, 1m
Service-C :b3, after b1, 1m
Service-B :b4, after b2, 1m
服务依赖关系(自上而下)
graph TD
redis[Redis]
nacos[Nacos]
gateway[Gateway]
serviceA[Service-A]
serviceB[Service-B]
serviceC[Service-C]
redis --> gateway
redis --> serviceA
redis --> serviceB
redis --> serviceC
nacos --> gateway
nacos --> serviceA
nacos --> serviceB
nacos --> serviceC
gateway --> serviceA
gateway --> serviceB
gateway --> serviceC
serviceA --> serviceB
0
0
0
79
No data