Why Docker compose does not wait for a container to be ready before moving on to start next service in dependency order?

Technology CommunityCategory: DockerWhy Docker compose does not wait for a container to be ready before moving on to start next service in dependency order?
VietMX Staff asked 3 years ago

Compose always starts and stops containers in dependency order, where dependencies are determined by depends_onlinksvolumes_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.