Bird
Raised Fist0
Spring Bootframework~20 mins

Health checks in Docker in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Docker Health Check Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
Understanding Docker HEALTHCHECK command behavior
Consider a Dockerfile with the following HEALTHCHECK instruction:
HEALTHCHECK --interval=10s --timeout=5s CMD curl -f http://localhost:8080/actuator/health || exit 1

What will Docker report as the container health status if the Spring Boot app's /actuator/health endpoint returns HTTP 503 for 3 consecutive checks?
ADocker will restart the container immediately after the first failed health check.
BThe container health status will remain 'healthy' because the app is running.
CThe container health status will be 'starting' indefinitely.
DThe container health status will be 'unhealthy' after the third failed check.
Attempts:
2 left
💡 Hint
Docker marks a container unhealthy only after consecutive failed health checks.
📝 Syntax
intermediate
2:00remaining
Correct syntax for Docker HEALTHCHECK with Spring Boot
Which of the following Dockerfile HEALTHCHECK instructions correctly checks the Spring Boot actuator health endpoint at http://localhost:8080/actuator/health?
AHEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1
BHEALTHCHECK CMD curl http://localhost:8080/actuator/health || exit 1
CHEALTHCHECK CMD curl -s http://localhost:8080/actuator/health
DHEALTHCHECK CMD curl -f http://localhost:8080/actuator/health && exit 1
Attempts:
2 left
💡 Hint
The -f flag makes curl fail on HTTP errors.
❓ state_output
advanced
2:00remaining
Spring Boot actuator health status effect on Docker health
If a Spring Boot application exposes /actuator/health with the following JSON response:
{"status":"DOWN","components":{"db":{"status":"DOWN"}}}

and the Docker HEALTHCHECK runs:
curl -f http://localhost:8080/actuator/health || exit 1

What will be the Docker container health status?
Ahealthy, because the HTTP status code is 200 even if status is DOWN
Bunhealthy, because the JSON contains 'DOWN' status
Cstarting, because the health endpoint is not reachable
Dunhealthy, because the HTTP status code is 503 or 500
Attempts:
2 left
💡 Hint
Docker health checks rely on command exit codes, not JSON content.
🔧 Debug
advanced
2:00remaining
Diagnosing failing Docker health check with Spring Boot
A Docker container running a Spring Boot app has this Dockerfile line:
HEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1

But Docker always shows the container as unhealthy. Which of the following is the most likely cause?
ADocker does not support health checks for Spring Boot apps.
BThe curl command is missing the -f flag to fail on HTTP errors.
CThe Spring Boot actuator endpoint is disabled or not exposed on port 8080.
DThe Dockerfile is missing EXPOSE 8080 instruction.
Attempts:
2 left
💡 Hint
Check if the health endpoint is reachable inside the container.
🧠 Conceptual
expert
3:00remaining
Best practice for integrating Spring Boot health with Docker health checks
Which approach best ensures Docker health status accurately reflects Spring Boot application health?
AParse the JSON response from /actuator/health in a custom script inside Docker HEALTHCHECK.
BConfigure Spring Boot actuator to return HTTP 503 when unhealthy and use curl -f in Docker HEALTHCHECK.
CUse Docker HEALTHCHECK to ping any open port without checking application health.
DDisable Docker HEALTHCHECK and rely on container restart policies only.
Attempts:
2 left
💡 Hint
Think about how Docker interprets health check command success or failure.

Practice

(1/5)
1.

What is the main purpose of adding a HEALTHCHECK instruction in a Dockerfile for a Spring Boot application?

easy
A. To let Docker monitor if the app is running correctly and restart if needed
B. To speed up the app startup time inside the container
C. To reduce the container size by removing unused files
D. To automatically update the Spring Boot version inside the container

Solution

  1. Step 1: Understand the role of HEALTHCHECK in Docker

    The HEALTHCHECK instruction tells Docker how to test if the container's app is healthy.
  2. Step 2: Connect HEALTHCHECK to app monitoring

    It helps Docker detect problems and restart the app if it stops working properly.
  3. Final Answer:

    To let Docker monitor if the app is running correctly and restart if needed -> Option A
  4. Quick Check:

    HEALTHCHECK monitors app health [OK]
Hint: HEALTHCHECK = Docker watches app health and restarts if unhealthy [OK]
Common Mistakes:
  • Thinking HEALTHCHECK speeds up app startup
  • Confusing HEALTHCHECK with image size optimization
  • Assuming HEALTHCHECK updates app versions automatically
2.

Which of the following is the correct syntax to add a health check in a Dockerfile for a Spring Boot app that exposes /actuator/health on port 8080?

?
easy
A. HEALTHCHECK RUN curl http://localhost:8080/actuator/health
B. HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1
C. HEALTHCHECK CMD ping localhost:8080/actuator/health
D. HEALTHCHECK EXEC curl http://localhost:8080/actuator/health

Solution

  1. Step 1: Identify correct HEALTHCHECK syntax

    The HEALTHCHECK instruction uses CMD followed by a command that returns 0 on success or non-zero on failure.
  2. Step 2: Verify the command tests the health endpoint properly

    Using curl with --fail returns error if the endpoint is unhealthy, triggering Docker restart.
  3. Final Answer:

    HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1 -> Option B
  4. Quick Check:

    HEALTHCHECK CMD + curl --fail = correct syntax [OK]
Hint: Use HEALTHCHECK CMD with curl --fail for health endpoint [OK]
Common Mistakes:
  • Using RUN instead of CMD in HEALTHCHECK
  • Using ping instead of curl for HTTP check
  • Using EXEC keyword which is invalid
3.

Given this Dockerfile snippet, what will Docker report as the container health status if the Spring Boot app's /actuator/health endpoint returns HTTP 500?

HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1
medium
A. healthy
B. unknown
C. starting
D. unhealthy

Solution

  1. Step 1: Understand curl --fail behavior on HTTP 500

    The curl --fail option causes curl to exit with error on HTTP status codes 400 or above.
  2. Step 2: Connect curl failure to Docker health status

    Since curl fails, the HEALTHCHECK command exits with 1, marking container as unhealthy.
  3. Final Answer:

    unhealthy -> Option D
  4. Quick Check:

    HTTP 500 triggers curl failure = unhealthy [OK]
Hint: curl --fail fails on HTTP 500, so container becomes unhealthy [OK]
Common Mistakes:
  • Assuming HTTP 500 still means healthy
  • Confusing 'starting' with unhealthy status
  • Thinking Docker ignores health check failures
4.

Identify the error in this Dockerfile health check instruction for a Spring Boot app:

HEALTHCHECK CMD curl http://localhost:8080/actuator/health || exit 1
medium
A. Incorrect URL path for health endpoint
B. Using CMD instead of RUN for HEALTHCHECK
C. Missing --fail option in curl to detect HTTP errors
D. Missing port number in the URL

Solution

  1. Step 1: Check curl command correctness for health check

    Without --fail, curl returns success even if HTTP status is error (like 500).
  2. Step 2: Understand impact on Docker health status

    Docker will wrongly mark container healthy because curl does not fail on bad HTTP codes.
  3. Final Answer:

    Missing --fail option in curl to detect HTTP errors -> Option C
  4. Quick Check:

    curl needs --fail to detect HTTP errors [OK]
Hint: Always add --fail to curl in HEALTHCHECK to catch errors [OK]
Common Mistakes:
  • Using RUN instead of CMD in HEALTHCHECK
  • Wrong health endpoint URL
  • Forgetting port number in URL
5.

You want Docker to check your Spring Boot app health every 30 seconds, retry 3 times before marking unhealthy, and start checking only after 10 seconds of container start. Which HEALTHCHECK instruction correctly implements this?

hard
A. HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/actuator/health || exit 1
B. HEALTHCHECK --interval=10s --timeout=30s --start-period=3s --retries=5 CMD curl --fail http://localhost:8080/actuator/health || exit 1
C. HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD curl http://localhost:8080/actuator/health || exit 1
D. HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1

Solution

  1. Step 1: Match timing parameters to requirements

    Interval 30s means check every 30 seconds, start-period 10s delays first check, retries 3 means try 3 times before unhealthy.
  2. Step 2: Verify curl command correctness

    curl uses --fail to detect HTTP errors, with exit 1 to signal failure to Docker.
  3. Final Answer:

    HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/actuator/health || exit 1 -> Option A
  4. Quick Check:

    Correct timing + curl --fail = HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/actuator/health || exit 1 [OK]
Hint: Set interval, retries, start-period explicitly with curl --fail [OK]
Common Mistakes:
  • Mixing up interval and timeout values
  • Omitting --fail in curl command
  • Not setting start-period to delay checks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard