学习优先级:★★★★☆

易用性:★★☆☆☆

在 Docker Compose 文件中,depends_on 指令用于指定一个服务依赖于另一个服务。但这并不意味着依赖的服务一定会在另一个服务完全启动后才启动。它仅确保在启动依赖的服务之前,先尝试启动被依赖的服务。

以下是一个示例,展示了如何使用 depends_on,以及为什么需要理解它并不保证严格的启动顺序。

示例代码

version: '3'

services:
  web:
    image: nginx
    depends_on:
      - db

  db:
    image: postgres

执行结果

web 服务会在 db 服务启动后尝试启动,但不能保证数据库在 web 服务完全启动之前已经准备好。

depends_on 指令仅确保在尝试启动 web 服务之前,db 服务已被启动。但这并不意味着数据库服务在 web 服务启动之前已经完全可用。要确保一个服务在另一个服务准备好之前启动,需要实现特定的健康检查或自定义启动逻辑。

在 Docker Compose 版本 3 中,启动顺序的直接管理已被移除。相反,可以使用健康检查来监控服务的可用性,然后启动依赖于这些服务的其他服务。

补充说明

Docker Compose 版本 2 还允许更明确地控制启动顺序,但在版本 3 中已移除此功能。常见的解决方案是使用健康检查或重试机制。