Health checks help Docker know if your Spring Boot app is running well or needs restarting. This keeps your app reliable and available.
Health checks in Docker in Spring Boot
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD curl -f http://localhost:8080/actuator/health || exit 1
This Dockerfile instruction tells Docker how to check your app's health.
It uses Spring Boot's built-in /actuator/health endpoint to verify the app is running.
HEALTHCHECK CMD curl -f http://localhost:8080/actuator/health || exit 1
HEALTHCHECK --interval=10s --timeout=3s CMD curl -f http://localhost:8080/actuator/health || exit 1
HEALTHCHECK --start-period=20s --retries=5 CMD curl -f http://localhost:8080/actuator/health || exit 1
This Dockerfile builds a container for a Spring Boot app. It exposes port 8080 and adds a health check that calls the app's /actuator/health endpoint every 30 seconds. If the app is unhealthy, Docker can restart it automatically.
FROM openjdk:17-jdk-slim WORKDIR /app COPY target/myapp.jar ./myapp.jar EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["java", "-jar", "myapp.jar"]
Make sure your Spring Boot app has the actuator dependency and the health endpoint enabled.
You can customize the health endpoint or create your own for more specific checks.
Use Docker commands like docker ps and docker inspect to see health status.
Health checks let Docker watch your Spring Boot app's health automatically.
Use the /actuator/health endpoint as the check target.
Configure timing options to fit your app's startup and response times.
Practice
What is the main purpose of adding a HEALTHCHECK instruction in a Dockerfile for a Spring Boot application?
Solution
Step 1: Understand the role of HEALTHCHECK in Docker
The HEALTHCHECK instruction tells Docker how to test if the container's app is healthy.Step 2: Connect HEALTHCHECK to app monitoring
It helps Docker detect problems and restart the app if it stops working properly.Final Answer:
To let Docker monitor if the app is running correctly and restart if needed -> Option AQuick Check:
HEALTHCHECK monitors app health [OK]
- Thinking HEALTHCHECK speeds up app startup
- Confusing HEALTHCHECK with image size optimization
- Assuming HEALTHCHECK updates app versions automatically
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?
?
Solution
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.Step 2: Verify the command tests the health endpoint properly
Using curl with --fail returns error if the endpoint is unhealthy, triggering Docker restart.Final Answer:
HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1 -> Option BQuick Check:
HEALTHCHECK CMD + curl --fail = correct syntax [OK]
- Using RUN instead of CMD in HEALTHCHECK
- Using ping instead of curl for HTTP check
- Using EXEC keyword which is invalid
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
Solution
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.Step 2: Connect curl failure to Docker health status
Since curl fails, the HEALTHCHECK command exits with 1, marking container as unhealthy.Final Answer:
unhealthy -> Option DQuick Check:
HTTP 500 triggers curl failure = unhealthy [OK]
- Assuming HTTP 500 still means healthy
- Confusing 'starting' with unhealthy status
- Thinking Docker ignores health check failures
Identify the error in this Dockerfile health check instruction for a Spring Boot app:
HEALTHCHECK CMD curl http://localhost:8080/actuator/health || exit 1
Solution
Step 1: Check curl command correctness for health check
Without --fail, curl returns success even if HTTP status is error (like 500).Step 2: Understand impact on Docker health status
Docker will wrongly mark container healthy because curl does not fail on bad HTTP codes.Final Answer:
Missing --fail option in curl to detect HTTP errors -> Option CQuick Check:
curl needs --fail to detect HTTP errors [OK]
- Using RUN instead of CMD in HEALTHCHECK
- Wrong health endpoint URL
- Forgetting port number in URL
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?
Solution
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.Step 2: Verify curl command correctness
curl uses --fail to detect HTTP errors, with exit 1 to signal failure to Docker.Final Answer:
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD curl --fail http://localhost:8080/actuator/health || exit 1 -> Option AQuick 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]
- Mixing up interval and timeout values
- Omitting --fail in curl command
- Not setting start-period to delay checks
Ready to prove it?
Pass the test and this pattern moves unknown
