Compose always starts and stops containers in dependency order, where dependencies are determined by depends_on
, links
, volumes_from
, and network_mode
: “service:…”.
However, for startup Compose does not wait until a container is “ready” (whatever that means for your particular application) – only until it’s running. There’s a good reason for this:
- The problem of waiting for a database (for example) to be ready is really just a subset of a much larger problem of distributed systems. In production, your database could become unavailable or move hosts at any time. Your application needs to be resilient to these types of failures.
- To handle this, design your application to attempt to re-establish a connection to the database after a failure. If the application retries the connection, it can eventually connect to the database.
- The best solution is to perform this check in your application code, both at startup and whenever a connection is lost for any reason.