关键就在 depends_on 里面的 condition: service_healthy。有了这个,Compose 会一直等到 db 的 healthcheck 通过了才去启动 web 容器。不用 sleep,不用额外脚本,干干净净。
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: myapp
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 10
start_period: 30s
volumes:
- db_data:/var/lib/mysql
web:
build: .
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
environment:
DB_HOST: db
DB_PORT: 3306