Appearance
Fresh
Control startup order
Back
Control startup and shutdown order in Compose
Copy as Markdown
Open MarkdownAsk Docs AIClaudeOpen in Claude
Table of contents
You can control the order of service startup and shutdown with the depends_on attribute. Compose always starts and stops containers in dependency order, where dependencies are determined by depends_on, links, volumes_from, and network_mode: "service:...".
For example, if your application needs to access a database and both services are started with docker compose up, there is a chance this will fail since the application service might start before the database service and won't find a database able to handle its SQL statements.
Control startup
On startup, Compose does not wait until a container is "ready", only until it's running. This can cause issues if, for example, you have a relational database system that needs to start its own services before being able to handle incoming connections.
The solution for detecting the ready state of a service is to use the condition attribute with one of the following options:
service_startedservice_healthy. This specifies that a dependency is expected to be “healthy”, which is defined withhealthcheck, before starting a dependent service.service_completed_successfully. This specifies that a dependency is expected to run to successful completion before starting a dependent service.
Example
yaml
services:
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
redis:
condition: service_started
redis:
image: redis
db:
image: postgres:18
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10sCompose creates services in dependency order. db and redis are created before web.
Compose waits for healthchecks to pass on dependencies marked with service_healthy. db is expected to be "healthy" (as indicated by healthcheck) before web is created.
restart: true ensures that if db is updated or restarted due to an explicit Compose operation, for example docker compose restart, the web service is also restarted automatically, ensuring it re-establishes connections or dependencies correctly.
The healthcheck for the db service uses the pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} command to check if the PostgreSQL database is ready. The service is retried every 10 seconds, up to 5 times.
Compose also removes services in dependency order. web is removed before db and redis.