A Rust-based Docker health check for an HTTP URL passed in via ENV.
ℹ️
|
The health check URL has to return HTTP 200. The response body is not evaluated. |
❗
|
Only HTTP URLs are supported, i.e. HTTPS redirects are not supported. |
💡
|
You can use http://captive.apple.com for testing. |
This health check uses the HTTP URL passed in via the following ENV variable:
HEALTHCHECK_URL
-
the HTTP URL to be used for the health check
If HEALTHCHECK_URL
is not set http://localhost:3000/-/health/liveness
will be used.
❗
|
The health check calls the URL from within the container therefore |
❗
|
There is no check whether the given |
$ target/debug/healthcheck
$ echo $?
0
$ HEALTHCHECK_URL=http://captive.apple.com target/debug/healthcheck
$ echo $?
0
- 0
-
the health check URL returned HTTP 200
- 69
-
the health check URL was unreachable
- 100
-
the health check URL did not return HTTP 200
-
Copy the health check into your container:
DockerfileCOPY --from=healthcheck \ /tmp/target/release/healthcheck \ /usr/local/bin/healthcheck
-
Configure the health check:
DockerfileHEALTHCHECK --interval=5s --timeout=5s --start-period=5s \ CMD healthcheck || exit 1
More information:
-
(Optional) Pass the
HEALTHCHECK_URL
to thedocker container run
invocation:scripts/docker_start.shdocker container run \ ... --env HEALTHCHECK_URL='http://localhost:3000/-/health/liveness' \ ...
Alternatively, add the
HEALTHCHECK_URL
to theDockerfile
:DockerfileENV HEALTHCHECK_URL="http://localhost:3000/-/health/liveness"
Dockerfile: a simple HTTP server
-
Build the image:
$ scripts/docker_build.sh
-
Start a container:
$ scripts/docker_start.sh Listen local: http://localhost:3000 The URL has been copied to the clipboard.
-
Examine the two endpoints:
$ curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 200 $ curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/-/health/liveness 200
-
Get the health status:
$ scripts/docker_health.sh healthy 0
-
Stop the container:
$ scripts/docker_stop.sh
-
Remove all Docker artifacts related to this project:
$ scripts/docker_cleanup.sh