Câu hỏi phỏng vấn Docker
Câu hỏi

Why Docker compose does not wait for a container to be ready...

Câu trả lời

Docker Compose does not wait for a container to be fully "ready" before moving on to start the next service in the dependency order because the depends_on directive in Docker Compose only ensures that the containers are started in a specified order, not that they are fully operational or ready to accept connections. This behavior is by design and is rooted in the way Docker Compose handles container dependencies.

Key Points:

  1. Startup Order vs. Readiness:

    • The depends_on directive in Docker Compose specifies the order in which services should start. It ensures that a dependent service starts only after the services it depends on have been started. However, it does not wait for those services to be fully ready or healthy before starting the dependent service[3][5][11].
  2. Running State vs. Ready State:

    • Docker Compose considers a container "started" when it is in the running state, not necessarily when it is ready to handle requests. This can lead to situations where a service starts before its dependencies are fully initialized and ready to accept connections[11][15].
  3. Health Checks and Conditions:

    • To address this limitation, Docker Compose introduced health checks and conditions. By using the healthcheck directive, you can define a command that tests whether a service is ready. The depends_on directive can then be extended with conditions such as service_healthy to ensure that a dependent service only starts when the specified service is healthy[3][13][14].
    • Example:
      services:
        db:
          image: mysql:8.0
          healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
            interval: 10s
            retries: 5
        api:
          image: example.com/api:latest
          depends_on:
            db:
              condition: service_healthy
  4. External Tools:

    • In cases where health checks are not sufficient or applicable, external tools like docker-compose-wait, wait-for-it, or custom scripts can be used to ensure that a service waits for its dependencies to be fully ready before starting[1][4][7].

Conclusion:

Docker Compose's default behavior of starting containers in a specified order without waiting for them to be fully ready is a design ch...

expert

expert

Gợi ý câu hỏi phỏng vấn

junior

Can you remove (‘docker rm’) a container that is paused?

senior

Why do we need Kubernetes (and other orchestrators) above containers?

senior

Is it good practice to run stateful applications on Docker? What are the scenarios where Docker best
fits in?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào