From c46c2a6dd61c4019b2a00c2666b3a3fe09671528 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 5 Oct 2017 13:52:57 -0700 Subject: [PATCH] Fix healthcheck issue with Docker containers (#5011) Fixes #5010 --- Dockerfile | 11 ++++++----- Dockerfile.release | 2 +- .../docker-entrypoint.sh | 0 {buildscripts => dockerscripts}/healthcheck.sh | 18 ++++++++++-------- 4 files changed, 17 insertions(+), 14 deletions(-) rename {buildscripts => dockerscripts}/docker-entrypoint.sh (100%) rename {buildscripts => dockerscripts}/healthcheck.sh (81%) mode change 100644 => 100755 diff --git a/Dockerfile b/Dockerfile index 9f1febfdd..451631248 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,10 @@ ENV CGO_ENABLED 0 WORKDIR /go/src/github.com/minio/ +COPY dockerscripts/docker-entrypoint.sh dockerscripts/healthcheck.sh /usr/bin/ + RUN \ - apk add --no-cache ca-certificates && \ + apk add --no-cache ca-certificates curl && \ apk add --no-cache --virtual .build-deps git go musl-dev && \ echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf && \ go get -v -d github.com/minio/minio && \ @@ -19,12 +21,11 @@ RUN \ EXPOSE 9000 -COPY buildscripts/docker-entrypoint.sh /usr/bin/ - -RUN chmod +x /usr/bin/docker-entrypoint.sh - ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] VOLUME ["/export"] +HEALTHCHECK --interval=30s --timeout=5s \ + CMD /usr/bin/healthcheck.sh + CMD ["minio"] diff --git a/Dockerfile.release b/Dockerfile.release index cb1ad1bec..4f064662a 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -2,7 +2,7 @@ FROM alpine:3.6 MAINTAINER Minio Inc -COPY buildscripts/docker-entrypoint.sh buildscripts/healthcheck.sh /usr/bin/ +COPY dockerscripts/docker-entrypoint.sh dockerscripts/healthcheck.sh /usr/bin/ RUN \ apk add --no-cache ca-certificates && \ diff --git a/buildscripts/docker-entrypoint.sh b/dockerscripts/docker-entrypoint.sh similarity index 100% rename from buildscripts/docker-entrypoint.sh rename to dockerscripts/docker-entrypoint.sh diff --git a/buildscripts/healthcheck.sh b/dockerscripts/healthcheck.sh old mode 100644 new mode 100755 similarity index 81% rename from buildscripts/healthcheck.sh rename to dockerscripts/healthcheck.sh index 287fc20dc..1fbe689fa --- a/buildscripts/healthcheck.sh +++ b/dockerscripts/healthcheck.sh @@ -15,6 +15,8 @@ # limitations under the License. # +set -x + _init () { scheme="http://" address="127.0.0.1:9000" @@ -23,32 +25,32 @@ _init () { } healthcheck_main () { - # In distributed environment like Swarm, traffic is routed - # to a container only when it reports a `healthy` status. So, we exit - # with 0 to ensure healthy status till distributed Minio starts (120s). + # In distributed environment like Swarm, traffic is routed + # to a container only when it reports a `healthy` status. So, we exit + # with 0 to ensure healthy status till distributed Minio starts (120s). # # Refer: https://github.com/moby/moby/pull/28938#issuecomment-301753272 if [ $(( $(date +%s) - start )) -lt 120 ]; then exit 0 else # Get the http response code - http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" \ + http_response=$(curl -H "User-Agent: Mozilla" -s -k -o /dev/null -I -w "%{http_code}" \ ${scheme}${address}${resource}) # Get the http response body - http_response_body=$(curl -k -s ${scheme}${address}${resource}) + http_response_body=$(curl -H "User-Agent: Mozilla" -k -s ${scheme}${address}${resource}) - # server returns response 403 and body "SSL required" if non-TLS + # server returns response 403 and body "SSL required" if non-TLS # connection is attempted on a TLS-configured server. Change # the scheme and try again if [ "$http_response" = "403" ] && \ [ "$http_response_body" = "SSL required" ]; then scheme="https://" - http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" \ + http_response=$(curl -H "User-Agent: Mozilla" -s -k -o /dev/null -I -w "%{http_code}" \ ${scheme}${address}${resource}) fi - # If http_repsonse is 200 - server is up. When MINIO_BROWSER is + # If http_repsonse is 200 - server is up. When MINIO_BROWSER is # set to off, curl responds with 404. We assume that the server # is up [ "$http_response" = "200" ] || [ "$http_response" = "404" ]