A Rust-based Docker health check for an HTTP(S) URL passed in via ENV.
ℹ️
|
The health check URL has to return HTTP 200. The response body is not evaluated. |
ℹ️
|
HTTP, HTTP with HTTPS redirect, and HTTPS URLs are supported. |
💡
|
You can use http://captive.apple.com and https://captive.apple.com for testing. |
This health check uses the HTTP(S) URL passed in via the following ENV variable:
HEALTHCHECK_URL
-
the HTTP(S) URL to be used for the health check
If HEALTHCHECK_URL
is not set https://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 |
$ scripts/test.sh
$ target/debug/healthcheck
$ echo $?
0
$ HEALTHCHECK_URL=http://captive.apple.com target/debug/healthcheck
$ echo $?
0
$ HEALTHCHECK_URL=https://captive.apple.com target/debug/healthcheck
$ echo $?
0
- 0
-
the health check URL returned HTTP 200
- 69
-
the health check URL was unreachable
- 78
-
the runtime does not support HTTPS
- 100
-
the health check URL did not return HTTP 200
$ scripts/format.sh
$ scripts/lint.sh
-
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='https://localhost:3000/-/health/liveness' \ ...
Alternatively, add the
HEALTHCHECK_URL
to theDockerfile
:DockerfileENV HEALTHCHECK_URL="https://localhost:3000/-/health/liveness"
-
(Optional) If you have an
https
healthcheck URL with a custom certificate authority you need to add the certificate authorities root certificate to your image; for example for Alpine-based images:COPY ca.crt /usr/local/share/ca-certificates/ # hadolint ignore=DL3018 RUN apk add --no-cache ca-certificates && \ update-ca-certificates
Dockerfile: a simple HTTPS server
-
CA root certificate
-
localhost
certificate-
Create a new
localhost
certificate:$ scripts/create_ca_based_cert.sh
-
Copy the existing
localhost
certificate:$ scripts/copy_ca_based_cert.sh
-
-
Build the image:
$ scripts/docker_build.sh
-
Start a container:
$ scripts/docker_start.sh Listen local: https://localhost:3000 The URL has been copied to the clipboard.
-
Examine the two endpoints:
$ curl -s -o /dev/null -w "%{http_code}" https://localhost:3000 200 $ curl -s -o /dev/null -w "%{http_code}" https://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
-
(Optional) Delete the certificate authority.
💡You usually want to keep the certificate authority so you can use for other projects.
$ scripts/delete_ca.sh