diff --git a/Dockerfile b/Dockerfile index afdc46f..52658aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,7 @@ ENV ALLOW_RESTARTS=0 \ COMMIT=0 \ CONFIGS=0 \ CONTAINERS=0 \ + DISABLE_IPV6=0 \ DISTRIBUTION=0 \ EVENTS=1 \ EXEC=0 \ @@ -30,4 +31,7 @@ ENV ALLOW_RESTARTS=0 \ TASKS=0 \ VERSION=1 \ VOLUMES=0 -COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg +COPY docker-entrypoint.sh / +COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg.template + +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..7c7d539 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +# Normalize the input for DISABLE_IPV6 to lowercase +DISABLE_IPV6_LOWER=$(echo "$DISABLE_IPV6" | tr '[:upper:]' '[:lower:]') + +# Check for different representations of 'true' and set BIND_CONFIG +case "$DISABLE_IPV6_LOWER" in + 1|true|yes) + BIND_CONFIG=":2375" + ;; + *) + BIND_CONFIG="[::]:2375 v4v6" + ;; +esac + +# Process the HAProxy configuration template using sed +sed "s/\${BIND_CONFIG}/$BIND_CONFIG/g" /usr/local/etc/haproxy/haproxy.cfg.template > /usr/local/etc/haproxy/haproxy.cfg + +# Command-line argument handling +if [ "${1#-}" != "$1" ]; then + set -- haproxy "$@" +fi + +if [ "$#" -eq 0 ] || [ "$1" = 'haproxy' ]; then + if [ "$1" = 'haproxy' ]; then + shift + fi + set -- haproxy -W -db "$@" +fi + +exec "$@" diff --git a/haproxy.cfg b/haproxy.cfg index c87c8d8..43e3526 100644 --- a/haproxy.cfg +++ b/haproxy.cfg @@ -44,7 +44,7 @@ backend docker-events timeout server 0 frontend dockerfrontend - bind :::2375 v4v6 + bind ${BIND_CONFIG} http-request deny unless METH_GET || { env(POST) -m bool } http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/[a-zA-Z0-9_.-]+/((stop)|(restart)|(kill)) } { env(ALLOW_RESTARTS) -m bool } http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/[a-zA-Z0-9_.-]+/start } { env(ALLOW_START) -m bool }