From 9b55169251624be7feffe834e1a7e7820a1d4f5c Mon Sep 17 00:00:00 2001 From: Azamat M <25627421+mazamats@users.noreply.github.com> Date: Fri, 26 Oct 2018 05:51:08 -0600 Subject: [PATCH] Add readiness check for docker container (#9804) * Update Dockerfile Since parity is built for "mission critical use", I thought other operators may see the need for this. Adding the `curl` and `jq` commands allows for an extremely simple health check to be usable in container orchestrators. For example. Here is a health check for a parity docker container running in Kubernetes. This can be setup as a readiness Probe that would prevent clustered nodes that aren't ready from serving traffic. ```bash #!/bin/bash ETH_SYNCING=$(curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545 -H 'Content-Type: application/json') RESULT=$(echo "$ETH_SYNCING | jq -r .result) if [ "$RESULT" == "false" ]; then echo "Parity is ready to start accepting traffic" exit 0 else echo "Parity is still syncing the blockchain" exit 1 fi ``` * add sync check script --- scripts/docker/hub/Dockerfile | 4 +++- scripts/docker/hub/check_sync.sh | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100755 scripts/docker/hub/check_sync.sh diff --git a/scripts/docker/hub/Dockerfile b/scripts/docker/hub/Dockerfile index 53fa092ef9e..35d1b05705e 100644 --- a/scripts/docker/hub/Dockerfile +++ b/scripts/docker/hub/Dockerfile @@ -5,7 +5,7 @@ ARG TARGET ENV TARGET ${TARGET} # install tools and dependencies -RUN apt update && apt install -y --no-install-recommends openssl libudev-dev file +RUN apt update && apt install -y --no-install-recommends openssl libudev-dev file curl jq # show backtraces ENV RUST_BACKTRACE 1 @@ -31,6 +31,8 @@ COPY artifacts/x86_64-unknown-linux-gnu/$TARGET ./bin/$TARGET RUN echo "#!/bin/bash \n ${TARGET} \$@" > ./entrypoint.sh RUN chmod +x ./entrypoint.sh +ADD check_sync.sh /check_sync.sh + # setup ENTRYPOINT EXPOSE 5001 8080 8082 8083 8545 8546 8180 30303/tcp 30303/udp ENTRYPOINT ["./entrypoint.sh"] diff --git a/scripts/docker/hub/check_sync.sh b/scripts/docker/hub/check_sync.sh new file mode 100755 index 00000000000..4640a05386a --- /dev/null +++ b/scripts/docker/hub/check_sync.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# checks if parity has a fully synced blockchain + +ETH_SYNCING=$(curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545 -H 'Content-Type: application/json') +RESULT=$(echo "$ETH_SYNCING" | jq -r .result) + +if [ "$RESULT" == "false" ]; then + echo "Parity is ready to start accepting traffic" + exit 0 +else + echo "Parity is still syncing the blockchain" + exit 1 +fi