Skip to content

sdavids/sdavids-docker-healthcheck

Repository files navigation

sdavids-docker-healthcheck

Available Docker health checks:

Go http

a Go-based Docker health check for an HTTP URL

Go https

a Go-based Docker health check for an HTTP(S) URL

JavaScript Node.js

a Node.js-based Docker health check for an HTTP(S) URL

Rust http

a Rust-based Docker health check for an HTTP URL

Rust https

a Rust-based Docker health check for an HTTP(S) URL

shell nc

a nc-based Docker health check for a daemon port

Program Size Notes

shell nc

4.0K

only check the daemon’s port

JavaScript Node.js

4.0K

the node binary would add 41.2M

Rust http

212.0K

Rust https

548.0K

Go http

5.6M

Go https

5.6M

wget alpine

8.7M

wget debian

9.7M

curl alpine

9.8M

curl debian

19.0M

$ cd go/http
$ scripts/docker_build.sh -p linux/amd64 -t go-http
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:go-http sh -c 'du -kh /usr/local/bin/healthcheck'
5.6M    /usr/local/bin/healthcheck
$ cd go/https
$ scripts/docker_build.sh -p linux/amd64 -t go-https
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:go-https sh -c 'du -kh /usr/local/bin/healthcheck'
5.6M    /usr/local/bin/healthcheck
ℹ️

This health check is only useful in a Node.js Docker image, i.e., an image where the node binary already exists—​the node binary would add 41.2M.

$ cd js/nodejs
$ scripts/docker_build.sh -p linux/amd64 -t js-nodejs
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:js-nodejs sh -c 'du -kh /node/healthcheck.mjs'
4.0K    /node/healthcheck.mjs
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:js-nodejs sh -c 'du -kh /usr/bin/node'
41.2M   /usr/bin/node
$ cd rust/http
$ scripts/docker_build.sh -p linux/amd64 -t rust-http
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:rust-http sh -c 'du -kh /usr/local/bin/healthcheck'
212.0K  /usr/local/bin/healthcheck
$ cd rust/https
$ scripts/docker_build.sh -p linux/amd64 -t rust-https
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:rust-https sh -c 'du -kh /usr/local/bin/healthcheck'
548.0K  /usr/local/bin/healthcheck
ℹ️

This health check will only check if the daemon’s port is reachable, i.e., it will not check the HTTP body or status code of the response.

$ cd shell/nc
$ scripts/docker_build.sh -p linux/amd64 -t shell-nc
$ docker run --platform=linux/amd64 --rm de.sdavids/sdavids-docker-healthcheck:shell-nc sh -c 'du -kh /usr/local/bin/healthcheck'
4.0K    /usr/local/bin/healthcheck
$ docker run --platform=linux/amd64 --rm alpine:3.21.3 sh -c "apk --no-cache --quiet --no-progress add curl=8.12.1-r0 && ldd /usr/bin/curl | awk '{ print $ 3}' | xargs du -ckshL /usr/bin/curl"
248.0K  /usr/bin/curl
628.0K  /usr/lib/libcurl.so.4
104.0K  /usr/lib/libz.so.1
648.0K  /lib/ld-musl-x86_64.so.1
232.0K  /usr/lib/libcares.so.2
140.0K  /usr/lib/libnghttp2.so.14
196.0K  /usr/lib/libidn2.so.0
76.0K   /usr/lib/libpsl.so.5
780.0K  /usr/lib/libssl.so.3
4.3M    /usr/lib/libcrypto.so.3
700.0K  /usr/lib/libzstd.so.1
56.0K   /usr/lib/libbrotlidec.so.1
1.6M    /usr/lib/libunistring.so.5
140.0K  /usr/lib/libbrotlicommon.so.1
9.8M    total
$ docker run --platform=linux/amd64 --rm debian:12.9-slim sh -c "apt-get -qq update && apt-get -qq install -y curl=7.88.1-10+deb12u8 >/dev/null 2>&1 && ldd /usr/bin/curl | awk '{ print $ 3}' | xargs du -ckshL /usr/bin/curl"
276K    /usr/bin/curl
696K    /lib/x86_64-linux-gnu/libcurl.so.4
120K    /lib/x86_64-linux-gnu/libz.so.1
1.9M    /lib/x86_64-linux-gnu/libc.so.6
188K    /lib/x86_64-linux-gnu/libnghttp2.so.14
196K    /lib/x86_64-linux-gnu/libidn2.so.0
120K    /lib/x86_64-linux-gnu/librtmp.so.1
256K    /lib/x86_64-linux-gnu/libssh2.so.1
76K     /lib/x86_64-linux-gnu/libpsl.so.5
676K    /lib/x86_64-linux-gnu/libssl.so.3
4.6M    /lib/x86_64-linux-gnu/libcrypto.so.3
332K    /lib/x86_64-linux-gnu/libgssapi_krb5.so.2
372K    /lib/x86_64-linux-gnu/libldap-2.5.so.0
64K     /lib/x86_64-linux-gnu/liblber-2.5.so.0
748K    /lib/x86_64-linux-gnu/libzstd.so.1
48K     /lib/x86_64-linux-gnu/libbrotlidec.so.1
1.8M    /lib/x86_64-linux-gnu/libunistring.so.2
2.1M    /lib/x86_64-linux-gnu/libgnutls.so.30
288K    /lib/x86_64-linux-gnu/libhogweed.so.6
312K    /lib/x86_64-linux-gnu/libnettle.so.8
520K    /lib/x86_64-linux-gnu/libgmp.so.10
868K    /lib/x86_64-linux-gnu/libkrb5.so.3
180K    /lib/x86_64-linux-gnu/libk5crypto.so.3
20K     /lib/x86_64-linux-gnu/libcom_err.so.2
52K     /lib/x86_64-linux-gnu/libkrb5support.so.0
112K    /lib/x86_64-linux-gnu/libsasl2.so.2
136K    /lib/x86_64-linux-gnu/libbrotlicommon.so.1
1.3M    /lib/x86_64-linux-gnu/libp11-kit.so.0
84K     /lib/x86_64-linux-gnu/libtasn1.so.6
24K     /lib/x86_64-linux-gnu/libkeyutils.so.1
60K     /lib/x86_64-linux-gnu/libresolv.so.2
44K     /lib/x86_64-linux-gnu/libffi.so.8
19M     total
$ docker run --platform=linux/amd64 --rm alpine:3.21.3 sh -c "apk --no-cache --quiet --no-progress add wget=1.25.0-r0 && ldd /usr/bin/wget | awk '{ print $ 3}' | xargs du -ckshL /usr/bin/wget"
404.0K  /usr/bin/wget
696.0K  /usr/lib/libpcre2-8.so.0
196.0K  /usr/lib/libidn2.so.0
780.0K  /usr/lib/libssl.so.3
4.3M    /usr/lib/libcrypto.so.3
104.0K  /usr/lib/libz.so.1
648.0K  /lib/ld-musl-x86_64.so.1
1.6M    /usr/lib/libunistring.so.5
8.7M    total
$ docker run --platform=linux/amd64 --rm debian:12.9-slim sh -c "apt-get -qq update && apt-get -qq install -y wget=1.21.3-1+b2 >/dev/null 2>&1 && ldd /usr/bin/wget | awk '{ print $ 3}' | xargs du -ckshL /usr/bin/wget"
528K    /usr/bin/wget
616K    /lib/x86_64-linux-gnu/libpcre2-8.so.0
36K     /lib/x86_64-linux-gnu/libuuid.so.1
196K    /lib/x86_64-linux-gnu/libidn2.so.0
312K    /lib/x86_64-linux-gnu/libnettle.so.8
2.1M    /lib/x86_64-linux-gnu/libgnutls.so.30
120K    /lib/x86_64-linux-gnu/libz.so.1
76K     /lib/x86_64-linux-gnu/libpsl.so.5
1.9M    /lib/x86_64-linux-gnu/libc.so.6
1.8M    /lib/x86_64-linux-gnu/libunistring.so.2
1.3M    /lib/x86_64-linux-gnu/libp11-kit.so.0
84K     /lib/x86_64-linux-gnu/libtasn1.so.6
288K    /lib/x86_64-linux-gnu/libhogweed.so.6
520K    /lib/x86_64-linux-gnu/libgmp.so.10
44K     /lib/x86_64-linux-gnu/libffi.so.8
9.7M    total
$ scripts/format.sh
$ scripts/lint.sh

After initializing this repository, you need to install the Git hooks via:

$ git config set core.hooksPath .githooks

Ensure that you install version 3.1.7 and not 3.2.x!

Install easyrsa.

⚠️

Unfortunately, homebrew provides easy-rsa version 3.2.x .

$ curl -L https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz -o ~/Downloads/easy-rsa.tgz
$ tar -xzf ~/Downloads/easy-rsa.tgz -C ~/.local/share
$ mv  ~/.local/share/EasyRSA-3.1.7 ~/.local/share/easyrsa
$ ln -s ~/.local/share/easyrsa/easyrsa ~/.local/bin/easyrsa
$ rm ~/Downloads/easy-rsa.tgz

Install Go.

Install hadolint.

$ brew install hadolint

Install fnm or NVM.

~/.zprofile
if command -v fnm > /dev/null 2>&1; then
  eval "$(fnm env --use-on-cd)"
fi
~/.zshrc
export NVM_DIR="${HOME}/.nvm"

[ -s "${NVM_DIR}/nvm.sh" ] && . "${NVM_DIR}/nvm.sh"
[ -s "${NVM_DIR}/bash_completion" ] && . "${NVM_DIR}/bash_completion"

if command -v nvm > /dev/null 2>&1; then
  autoload -U add-zsh-hook
  load-nvmrc() {
    local nvmrc_path="$(nvm_find_nvmrc)"
    if [ -n "${nvmrc_path}" ]; then
      local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
      if [ "${nvmrc_node_version}" = "N/A" ]; then
        nvm install
      elif [ "${nvmrc_node_version}" != "$(nvm version)" ]; then
        nvm use
      fi
    elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
      echo "Reverting to nvm default version"
      nvm use default
    fi
  }

  add-zsh-hook chpwd load-nvmrc
  load-nvmrc
fi

Install Rust.

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --component rust-analyzer
$ sudo apt-get install shellcheck
$ brew install shellcheck
$ sudo apt-get install shfmt
$ brew install shfmt
$ sudo apt-get install yamllint
$ brew install yamllint