Container health checks in Docker - Time & Space Complexity
Checking container health helps keep apps running smoothly. We want to see how the time to check health changes as we add more containers.
How does the number of health checks grow when we have more containers?
Analyze the time complexity of the following Docker health check setup.
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1
This code sets a health check that runs every 30 seconds, trying to reach a local URL to confirm the container is healthy.
Look for repeated actions that affect time.
- Primary operation: The health check command runs repeatedly on each container.
- How many times: It runs every 30 seconds per container, so the number of checks grows with the number of containers.
As you add more containers, the total health checks increase proportionally.
| Input Size (n) | Approx. Operations (checks per interval) |
|---|---|
| 10 containers | 10 health checks |
| 100 containers | 100 health checks |
| 1000 containers | 1000 health checks |
Pattern observation: The total checks grow directly with the number of containers.
Time Complexity: O(n)
This means the time spent on health checks grows linearly as you add more containers.
[X] Wrong: "Health checks run once for all containers together, so time stays the same no matter how many containers there are."
[OK] Correct: Each container runs its own health check independently, so total checks add up with more containers.
Understanding how repeated tasks scale helps you design systems that stay reliable as they grow. This skill shows you can think about real-world system behavior clearly.
"What if we change the health check interval to run twice as often? How would the time complexity change?"
Practice
HEALTHCHECK in a Docker container?Solution
Step 1: Understand the role of HEALTHCHECK
The HEALTHCHECK instruction runs a command inside the container to verify if the app is working properly.Step 2: Identify what HEALTHCHECK does not do
It does not restart Docker daemon, update images, or increase CPU usage.Final Answer:
To check if the container's application is running correctly -> Option CQuick Check:
HEALTHCHECK verifies app status = B [OK]
- Confusing HEALTHCHECK with Docker daemon restart
- Thinking HEALTHCHECK updates images
- Assuming HEALTHCHECK changes resource usage
Solution
Step 1: Recall Dockerfile HEALTHCHECK syntax
The correct syntax usesHEALTHCHECK CMDfollowed by the command to run.Step 2: Identify incorrect keywords
RUN, EXEC, CHECK are not valid keywords for HEALTHCHECK instruction.Final Answer:
HEALTHCHECK CMD curl -f http://localhost/ || exit 1 -> Option AQuick Check:
HEALTHCHECK uses CMD keyword = C [OK]
- Using RUN instead of CMD in HEALTHCHECK
- Using EXEC or CHECK which are invalid
- Omitting CMD keyword entirely
HEALTHCHECK CMD curl -f http://localhost/health || exit 1 CMD ["./start-server.sh"]
What will be the health status if
curl fails?Solution
Step 1: Understand HEALTHCHECK command behavior
If the command returns a non-zero exit code (like exit 1), Docker marks the container as unhealthy.Step 2: Analyze the curl failure effect
Sincecurl -ffails, it triggersexit 1, so health status becomes unhealthy.Final Answer:
unhealthy -> Option AQuick Check:
Failed HEALTHCHECK command = unhealthy [OK]
- Assuming failure means healthy
- Confusing 'starting' with unhealthy
- Thinking status stays unknown on failure
HEALTHCHECK CMD curl http://localhost/health || exit 1
But your container health status is always
starting. What is the likely problem?Solution
Step 1: Understand 'starting' health status meaning
'starting' means the container is still within the initial grace period before health checks are considered final.Step 2: Analyze why health check stays 'starting'
If the command never succeeds during this period, Docker keeps status as 'starting'. Syntax is correct, Docker daemon running, and network likely accessible.Final Answer:
The health check command never succeeds within the start period -> Option DQuick Check:
Failing health check in start period = starting [OK]
- Assuming syntax error causes 'starting' status
- Blaming Docker daemon when it runs fine
- Ignoring network issues but they are less likely here
Solution
Step 1: Identify correct flags for interval and retries
--interval sets wait time between checks; --retries sets how many failures before unhealthy.Step 2: Match values to requirements
We want 10 seconds between checks and 3 retries, so--interval=10s --retries=3is correct. Timeout and start-period are different settings.Final Answer:
HEALTHCHECK --interval=10s --retries=3 CMD curl -f http://localhost/health || exit 1 -> Option BQuick Check:
Interval=10s and retries=3 flags = A [OK]
- Confusing timeout with interval
- Swapping retries and interval values
- Using start-period instead of interval
Ready to prove it?
Pass the test and this pattern moves unknown
