Fix healthcheck issue with Docker containers (#5011)

Fixes #5010
This commit is contained in:
Harshavardhana 2017-10-05 13:52:57 -07:00 committed by Dee Koder
parent 88938340b3
commit c46c2a6dd6
4 changed files with 17 additions and 14 deletions

View file

@ -8,8 +8,10 @@ ENV CGO_ENABLED 0
WORKDIR /go/src/github.com/minio/ WORKDIR /go/src/github.com/minio/
COPY dockerscripts/docker-entrypoint.sh dockerscripts/healthcheck.sh /usr/bin/
RUN \ 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 && \ apk add --no-cache --virtual .build-deps git go musl-dev && \
echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf && \ echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf && \
go get -v -d github.com/minio/minio && \ go get -v -d github.com/minio/minio && \
@ -19,12 +21,11 @@ RUN \
EXPOSE 9000 EXPOSE 9000
COPY buildscripts/docker-entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
VOLUME ["/export"] VOLUME ["/export"]
HEALTHCHECK --interval=30s --timeout=5s \
CMD /usr/bin/healthcheck.sh
CMD ["minio"] CMD ["minio"]

View file

@ -2,7 +2,7 @@ FROM alpine:3.6
MAINTAINER Minio Inc <dev@minio.io> MAINTAINER Minio Inc <dev@minio.io>
COPY buildscripts/docker-entrypoint.sh buildscripts/healthcheck.sh /usr/bin/ COPY dockerscripts/docker-entrypoint.sh dockerscripts/healthcheck.sh /usr/bin/
RUN \ RUN \
apk add --no-cache ca-certificates && \ apk add --no-cache ca-certificates && \

View file

@ -15,6 +15,8 @@
# limitations under the License. # limitations under the License.
# #
set -x
_init () { _init () {
scheme="http://" scheme="http://"
address="127.0.0.1:9000" address="127.0.0.1:9000"
@ -23,32 +25,32 @@ _init () {
} }
healthcheck_main () { healthcheck_main () {
# In distributed environment like Swarm, traffic is routed # In distributed environment like Swarm, traffic is routed
# to a container only when it reports a `healthy` status. So, we exit # to a container only when it reports a `healthy` status. So, we exit
# with 0 to ensure healthy status till distributed Minio starts (120s). # with 0 to ensure healthy status till distributed Minio starts (120s).
# #
# Refer: https://github.com/moby/moby/pull/28938#issuecomment-301753272 # Refer: https://github.com/moby/moby/pull/28938#issuecomment-301753272
if [ $(( $(date +%s) - start )) -lt 120 ]; then if [ $(( $(date +%s) - start )) -lt 120 ]; then
exit 0 exit 0
else else
# Get the http response code # 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}) ${scheme}${address}${resource})
# Get the http response body # 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 # connection is attempted on a TLS-configured server. Change
# the scheme and try again # the scheme and try again
if [ "$http_response" = "403" ] && \ if [ "$http_response" = "403" ] && \
[ "$http_response_body" = "SSL required" ]; then [ "$http_response_body" = "SSL required" ]; then
scheme="https://" 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}) ${scheme}${address}${resource})
fi 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 # set to off, curl responds with 404. We assume that the server
# is up # is up
[ "$http_response" = "200" ] || [ "$http_response" = "404" ] [ "$http_response" = "200" ] || [ "$http_response" = "404" ]