Skip to content

Conversation

@tianon
Copy link
Member

@tianon tianon commented Dec 12, 2017

- `bash`: apply Alpine patch to 4.4 for process substitution hang (tianon/docker-bash#4)
- `golang`: add `alpine3.7` variant of 1.9 (docker-library/golang#192)
- `rabbitmq`: add 3.7, which includes a new configuration file format (docker-library/rabbitmq#197)
- `ruby`: remove `2.5-rc-alpine3.6` variant (superseded by `2.5-rc-alpine3.7`)
@yosifkit
Copy link
Member

Diff:
diff --git a/_bashbrew-arches b/_bashbrew-arches
index 2392ace..17f9fe9 100644
--- a/_bashbrew-arches
+++ b/_bashbrew-arches
@@ -74,6 +74,12 @@ golang:1.8-stretch @ ppc64le
 golang:1.8-stretch @ s390x
 golang:1.8-windowsservercore-1709 @ windows-amd64
 golang:1.8-windowsservercore-ltsc2016 @ windows-amd64
+golang:alpine3.7 @ amd64
+golang:alpine3.7 @ arm32v6
+golang:alpine3.7 @ arm64v8
+golang:alpine3.7 @ i386
+golang:alpine3.7 @ ppc64le
+golang:alpine3.7 @ s390x
 golang:alpine @ amd64
 golang:alpine @ arm32v6
 golang:alpine @ arm64v8
@@ -104,6 +110,32 @@ golang:stretch @ ppc64le
 golang:stretch @ s390x
 golang:windowsservercore-1709 @ windows-amd64
 golang:windowsservercore-ltsc2016 @ windows-amd64
+rabbitmq:3.6 @ amd64
+rabbitmq:3.6 @ arm32v5
+rabbitmq:3.6 @ arm32v7
+rabbitmq:3.6 @ arm64v8
+rabbitmq:3.6 @ i386
+rabbitmq:3.6 @ ppc64le
+rabbitmq:3.6 @ s390x
+rabbitmq:3.6-alpine @ amd64
+rabbitmq:3.6-alpine @ arm32v6
+rabbitmq:3.6-alpine @ arm64v8
+rabbitmq:3.6-alpine @ i386
+rabbitmq:3.6-alpine @ ppc64le
+rabbitmq:3.6-alpine @ s390x
+rabbitmq:3.6-management @ amd64
+rabbitmq:3.6-management @ arm32v5
+rabbitmq:3.6-management @ arm32v7
+rabbitmq:3.6-management @ arm64v8
+rabbitmq:3.6-management @ i386
+rabbitmq:3.6-management @ ppc64le
+rabbitmq:3.6-management @ s390x
+rabbitmq:3.6-management-alpine @ amd64
+rabbitmq:3.6-management-alpine @ arm32v6
+rabbitmq:3.6-management-alpine @ arm64v8
+rabbitmq:3.6-management-alpine @ i386
+rabbitmq:3.6-management-alpine @ ppc64le
+rabbitmq:3.6-management-alpine @ s390x
 rabbitmq:alpine @ amd64
 rabbitmq:alpine @ arm32v6
 rabbitmq:alpine @ arm64v8
@@ -208,12 +240,6 @@ ruby:rc @ arm64v8
 ruby:rc @ i386
 ruby:rc @ ppc64le
 ruby:rc @ s390x
-ruby:rc-alpine3.6 @ amd64
-ruby:rc-alpine3.6 @ arm32v6
-ruby:rc-alpine3.6 @ arm64v8
-ruby:rc-alpine3.6 @ i386
-ruby:rc-alpine3.6 @ ppc64le
-ruby:rc-alpine3.6 @ s390x
 ruby:rc-alpine @ amd64
 ruby:rc-alpine @ arm32v6
 ruby:rc-alpine @ arm64v8
diff --git a/_bashbrew-list b/_bashbrew-list
index c0fd0bd..f19f0e7 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -20,6 +20,7 @@ bash:latest
 golang:1
 golang:1-alpine
 golang:1-alpine3.6
+golang:1-alpine3.7
 golang:1-nanoserver-sac2016
 golang:1-stretch
 golang:1-windowsservercore-1709
@@ -47,6 +48,7 @@ golang:1.8.5-windowsservercore-ltsc2016
 golang:1.9
 golang:1.9-alpine
 golang:1.9-alpine3.6
+golang:1.9-alpine3.7
 golang:1.9-nanoserver-sac2016
 golang:1.9-stretch
 golang:1.9-windowsservercore-1709
@@ -54,6 +56,7 @@ golang:1.9-windowsservercore-ltsc2016
 golang:1.9.2
 golang:1.9.2-alpine
 golang:1.9.2-alpine3.6
+golang:1.9.2-alpine3.7
 golang:1.9.2-nanoserver-sac2016
 golang:1.9.2-stretch
 golang:1.9.2-windowsservercore-1709
@@ -74,6 +77,7 @@ golang:1.10-rc-windowsservercore-1709
 golang:1.10-rc-windowsservercore-ltsc2016
 golang:alpine
 golang:alpine3.6
+golang:alpine3.7
 golang:latest
 golang:nanoserver
 golang:nanoserver-sac2016
@@ -100,6 +104,14 @@ rabbitmq:3.6.14
 rabbitmq:3.6.14-alpine
 rabbitmq:3.6.14-management
 rabbitmq:3.6.14-management-alpine
+rabbitmq:3.7
+rabbitmq:3.7-alpine
+rabbitmq:3.7-management
+rabbitmq:3.7-management-alpine
+rabbitmq:3.7.0
+rabbitmq:3.7.0-alpine
+rabbitmq:3.7.0-management
+rabbitmq:3.7.0-management-alpine
 rabbitmq:alpine
 rabbitmq:latest
 rabbitmq:management
@@ -167,14 +179,12 @@ ruby:2.4.2-slim-stretch
 ruby:2.4.2-stretch
 ruby:2.5-rc
 ruby:2.5-rc-alpine
-ruby:2.5-rc-alpine3.6
 ruby:2.5-rc-alpine3.7
 ruby:2.5-rc-slim
 ruby:2.5-rc-slim-stretch
 ruby:2.5-rc-stretch
 ruby:2.5.0-preview1
 ruby:2.5.0-preview1-alpine
-ruby:2.5.0-preview1-alpine3.6
 ruby:2.5.0-preview1-alpine3.7
 ruby:2.5.0-preview1-slim
 ruby:2.5.0-preview1-slim-stretch
@@ -188,7 +198,6 @@ ruby:latest
 ruby:onbuild
 ruby:rc
 ruby:rc-alpine
-ruby:rc-alpine3.6
 ruby:rc-alpine3.7
 ruby:rc-slim
 ruby:rc-slim-stretch
diff --git a/bash_latest/Dockerfile b/bash_latest/Dockerfile
index f1102df..52abd85 100644
--- a/bash_latest/Dockerfile
+++ b/bash_latest/Dockerfile
@@ -79,6 +79,15 @@ RUN set -ex; \
 		rmdir bash-patches; \
 	fi; \
 	\
+# temporarily apply Alpine's patch to fix process substitution hanging in 4.4
+# see https://github.com/tianon/docker-bash/issues/4
+# and https://lists.gnu.org/archive/html/bug-bash/2017-12/msg00025.html
+# and https://github.com/alpinelinux/aports/commit/3239e62fb1c7968e923016358345a4dcc7e2f87d
+	wget -O alpine-fix-jobs.patch 'https://github.com/alpinelinux/aports/raw/3239e62fb1c7968e923016358345a4dcc7e2f87d/main/bash/fix-jobs.patch'; \
+	echo '0e1a1d0f9d1ec90188beb99e5c6c5c92a2baeb26f9d4f147b4c9e0a2b697d2d13ff3210985b8ebf849f916af1cc124f655bd026b28f37d5abd51be7b9672da9a *alpine-fix-jobs.patch' | sha512sum -c -; \
+	patch --directory=/usr/src/bash --input="$PWD/alpine-fix-jobs.patch" --strip=1; \
+	rm alpine-fix-jobs.patch; \
+	\
 	cd /usr/src/bash; \
 	gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
 # update "config.guess" and "config.sub" to get more aggressively inclusive architecture support
diff --git a/golang_alpine/Dockerfile b/golang_alpine3.7/Dockerfile
similarity index 99%
copy from golang_alpine/Dockerfile
copy to golang_alpine3.7/Dockerfile
index f9a6904..77aa5ef 100644
--- a/golang_alpine/Dockerfile
+++ b/golang_alpine3.7/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.6
+FROM alpine:3.7
 
 RUN apk add --no-cache ca-certificates
 
diff --git a/golang_1.8-alpine/go-wrapper b/golang_alpine3.7/go-wrapper
similarity index 100%
copy from golang_1.8-alpine/go-wrapper
copy to golang_alpine3.7/go-wrapper
diff --git a/golang_1.8-alpine3.6/make-sure-R0-is-zero-before-main-on-ppc64le.patch b/golang_alpine3.7/make-sure-R0-is-zero-before-main-on-ppc64le.patch
similarity index 100%
copy from golang_1.8-alpine3.6/make-sure-R0-is-zero-before-main-on-ppc64le.patch
copy to golang_alpine3.7/make-sure-R0-is-zero-before-main-on-ppc64le.patch
diff --git a/golang_alpine/no-pic.patch b/golang_alpine3.7/no-pic.patch
similarity index 100%
copy from golang_alpine/no-pic.patch
copy to golang_alpine3.7/no-pic.patch
diff --git a/rabbitmq_alpine/Dockerfile b/rabbitmq_3.6-alpine/Dockerfile
similarity index 100%
copy from rabbitmq_alpine/Dockerfile
copy to rabbitmq_3.6-alpine/Dockerfile
diff --git a/rabbitmq_alpine/docker-entrypoint.sh b/rabbitmq_3.6-alpine/docker-entrypoint.sh
similarity index 100%
copy from rabbitmq_alpine/docker-entrypoint.sh
copy to rabbitmq_3.6-alpine/docker-entrypoint.sh
diff --git a/rabbitmq_management-alpine/Dockerfile b/rabbitmq_3.6-management-alpine/Dockerfile
similarity index 100%
copy from rabbitmq_management-alpine/Dockerfile
copy to rabbitmq_3.6-management-alpine/Dockerfile
diff --git a/rabbitmq_management/Dockerfile b/rabbitmq_3.6-management/Dockerfile
similarity index 100%
copy from rabbitmq_management/Dockerfile
copy to rabbitmq_3.6-management/Dockerfile
diff --git a/rabbitmq_latest/Dockerfile b/rabbitmq_3.6/Dockerfile
similarity index 98%
copy from rabbitmq_latest/Dockerfile
copy to rabbitmq_3.6/Dockerfile
index 7b37bb1..9241e8f 100644
--- a/rabbitmq_latest/Dockerfile
+++ b/rabbitmq_3.6/Dockerfile
@@ -1,6 +1,6 @@
 FROM debian:stretch-slim
 
-RUN set -ex; \
+RUN set -eux; \
 	apt-get update; \
 	apt-get install -y --no-install-recommends \
 		gnupg \
@@ -13,7 +13,7 @@ RUN groupadd -r rabbitmq && useradd -r -d /var/lib/rabbitmq -m -g rabbitmq rabbi
 
 # grab gosu for easy step-down from root
 ENV GOSU_VERSION 1.10
-RUN set -x \
+RUN set -eux \
 	&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
 	&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
 	&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
@@ -26,7 +26,7 @@ RUN set -x \
 	&& apt-get purge -y --auto-remove ca-certificates wget
 
 # install Erlang
-RUN set -ex; \
+RUN set -eux; \
 	apt-get update; \
 # "erlang-base-hipe" is optional (and only supported on a few arches)
 # so, only install it if it's available for our current arch
@@ -64,7 +64,7 @@ ENV RABBITMQ_VERSION 3.6.14
 ENV RABBITMQ_GITHUB_TAG rabbitmq_v3_6_14
 ENV RABBITMQ_DEBIAN_VERSION 3.6.14-1
 
-RUN set -ex; \
+RUN set -eux; \
 	\
 	apt-get update; \
 	apt-get install -y --no-install-recommends ca-certificates wget; \
diff --git a/rabbitmq_latest/docker-entrypoint.sh b/rabbitmq_3.6/docker-entrypoint.sh
similarity index 100%
copy from rabbitmq_latest/docker-entrypoint.sh
copy to rabbitmq_3.6/docker-entrypoint.sh
diff --git a/rabbitmq_alpine/Dockerfile b/rabbitmq_alpine/Dockerfile
index b82c25a..b77868e 100644
--- a/rabbitmq_alpine/Dockerfile
+++ b/rabbitmq_alpine/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.6
+FROM alpine:3.7
 
 # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
 RUN addgroup -S rabbitmq && adduser -S -h /var/lib/rabbitmq -G rabbitmq rabbitmq
@@ -36,8 +36,8 @@ ENV PATH $RABBITMQ_HOME/sbin:$PATH
 # gpg: key 6026DFCA: public key "RabbitMQ Release Signing Key <info@rabbitmq.com>" imported
 ENV RABBITMQ_GPG_KEY 0A9AF2115F4687BD29803A206B73A36E6026DFCA
 
-ENV RABBITMQ_VERSION 3.6.14
-ENV RABBITMQ_GITHUB_TAG rabbitmq_v3_6_14
+ENV RABBITMQ_VERSION 3.7.0
+ENV RABBITMQ_GITHUB_TAG v3.7.0
 
 RUN set -ex; \
 	\
@@ -76,9 +76,9 @@ RUN set -ex; \
 # set home so that any `--user` knows where to put the erlang cookie
 ENV HOME /var/lib/rabbitmq
 
-RUN mkdir -p /var/lib/rabbitmq /etc/rabbitmq \
-	&& chown -R rabbitmq:rabbitmq /var/lib/rabbitmq /etc/rabbitmq \
-	&& chmod -R 777 /var/lib/rabbitmq /etc/rabbitmq
+RUN mkdir -p /var/lib/rabbitmq /etc/rabbitmq /var/log/rabbitmq \
+	&& chown -R rabbitmq:rabbitmq /var/lib/rabbitmq /etc/rabbitmq /var/log/rabbitmq \
+	&& chmod -R 777 /var/lib/rabbitmq /etc/rabbitmq /var/log/rabbitmq
 VOLUME /var/lib/rabbitmq
 
 # add a symlink to the .erlang.cookie in /root so we can "docker exec rabbitmqctl ..." without gosu
diff --git a/rabbitmq_alpine/docker-entrypoint.sh b/rabbitmq_alpine/docker-entrypoint.sh
index d73505d..aefb563 100755
--- a/rabbitmq_alpine/docker-entrypoint.sh
+++ b/rabbitmq_alpine/docker-entrypoint.sh
@@ -156,7 +156,7 @@ for conf in "${!configDefaults[@]}"; do
 	eval "export $var=\"\$default\""
 done
 
-# If long & short hostnames are not the same, use long hostnames
+# if long and short hostnames are not the same, use long hostnames
 if [ "$(hostname)" != "$(hostname -s)" ]; then
 	: "${RABBITMQ_USE_LONGNAME:=true}"
 fi
@@ -175,87 +175,92 @@ if [ "${RABBITMQ_ERLANG_COOKIE:-}" ]; then
 	chmod 600 "$cookieFile"
 fi
 
-# prints "$2$1$3$1...$N"
-join() {
-	local sep="$1"; shift
-	local out; printf -v out "${sep//%/%%}%s" "$@"
-	echo "${out#$sep}"
-}
-indent() {
-	if [ "$#" -gt 0 ]; then
-		echo "$@"
-	else
-		cat
-	fi | sed 's/^/\t/g'
+configBase="${RABBITMQ_CONFIG_FILE:-/etc/rabbitmq/rabbitmq}"
+oldConfigFile="$configBase.config"
+newConfigFile="$configBase.conf"
+
+shouldWriteConfig="$haveConfig"
+if [ -n "$shouldWriteConfig" ] && [ -f "$oldConfigFile" ]; then
+	{
+		echo "error: Docker configuration environment variables specified, but old-style (Erlang syntax) configuration file '$oldConfigFile' exists"
+		echo "  Suggested fixes: (choose one)"
+		echo "   - remove '$oldConfigFile'"
+		echo "   - remove any Docker-specific 'RABBITMQ_...' environment variables"
+		echo "   - convert '$oldConfigFile' to the newer sysctl format ('$newConfigFile'); see https://www.rabbitmq.com/configure.html#config-file"
+	} >&2
+	exit 1
+fi
+if [ -z "$shouldWriteConfig" ] && [ ! -f "$oldConfigFile" ] && [ ! -f "$newConfigFile" ]; then
+	# no config files, we should write one
+	shouldWriteConfig=1
+fi
+
+# http://stackoverflow.com/a/2705678/433558
+sed_escape_lhs() {
+	echo "$@" | sed -e 's/[]\/$*.^|[]/\\&/g'
 }
-rabbit_array() {
-	echo -n '['
-	case "$#" in
-		0) echo -n ' ' ;;
-		1) echo -n " $1 " ;;
-		*)
-			local vals="$(join $',\n' "$@")"
-			echo
-			indent "$vals"
-	esac
-	echo -n ']'
+sed_escape_rhs() {
+	echo "$@" | sed -e 's/[\/&]/\\&/g'
 }
-rabbit_string() {
+rabbit_set_config() {
+	local key="$1"; shift
 	local val="$1"; shift
-	# fire up erlang directly to have it do the proper escaping for us
-	erl -noinput -eval 'io:format("~p\n", init:get_plain_arguments()), init:stop().' -- "$val"
+
+	[ -e "$newConfigFile" ] || touch "$newConfigFile"
+
+	local sedKey="$(sed_escape_lhs "$key")"
+	local sedVal="$(sed_escape_rhs "$val")"
+	sed -ri \
+		"s/^[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*)\S.*\$/\1${sedVal}/" \
+		"$newConfigFile"
+	if ! grep -qE "^${sedKey}[[:space:]]*=" "$newConfigFile"; then
+		echo "$key = $val" >> "$newConfigFile"
+	fi
+}
+rabbit_comment_config() {
+	local key="$1"; shift
+
+	[ -e "$newConfigFile" ] || touch "$newConfigFile"
+
+	local sedKey="$(sed_escape_lhs "$key")"
+	sed -ri \
+		"s/^[[:space:]]*#?[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*\S.*)\$/# \1/" \
+		"$newConfigFile"
 }
 rabbit_env_config() {
 	local prefix="$1"; shift
 
-	local ret=()
 	local conf
 	for conf; do
 		local var="rabbitmq${prefix:+_$prefix}_$conf"
 		var="${var^^}"
 
-		local val="${!var:-}"
+		local key="$conf"
+		case "$prefix" in
+			ssl) key="ssl_options.$key" ;;
+			management_ssl) key="management.listener.ssl_opts.$key" ;;
+		esac
 
-		local rawVal=
+		local val="${!var:-}"
+		local rawVal="$val"
 		case "$conf" in
-			verify|fail_if_no_peer_cert|depth)
-				[ "$val" ] || continue
-				rawVal="$val"
-				;;
-
-			hipe_compile)
-				[ "$val" ] && rawVal='true' || rawVal='false'
-				;;
-
-			cacertfile|certfile|keyfile)
-				[ "$val" ] || continue
-				rawVal="$(rabbit_string "$val")"
+			verify|fail_if_no_peer_cert|depth|hipe_compile)
+				[ -n "$val" ] && rawVal='true' || rawVal='false'
 				;;
 
-			*)
-				[ "$val" ] || continue
-				rawVal="<<$(rabbit_string "$val")>>"
-				;;
+			vm_memory_high_watermark) continue ;; # handled separately
 		esac
-		[ "$rawVal" ] || continue
 
-		ret+=( "{ $conf, $rawVal }" )
+		if [ -n "$rawVal" ]; then
+			rabbit_set_config "$key" "$rawVal"
+		else
+			rabbit_comment_config "$key"
+		fi
 	done
-
-	join $'\n' "${ret[@]}"
 }
 
-shouldWriteConfig="$haveConfig"
-if [ ! -f /etc/rabbitmq/rabbitmq.config ]; then
-	shouldWriteConfig=1
-fi
-
 if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
-	fullConfig=()
-
-	rabbitConfig=(
-		"{ loopback_users, $(rabbit_array) }"
-	)
+	rabbit_set_config 'loopback_users.guest' 'false'
 
 	# determine whether to set "vm_memory_high_watermark" (based on cgroups)
 	memTotalKb=
@@ -277,12 +282,14 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
 	if [ -n "$memLimitB" ]; then
 		# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
 		# https://github.com/rabbitmq/rabbitmq-server/pull/1234
-		rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
+		:# TODO rabbit_set_config 'total_memory_available_override_value' "$memLimitB"
+		# TODO https://github.com/rabbitmq/rabbitmq-server/issues/1445 (missing in 3.7.0)
 	fi
+	# https://www.rabbitmq.com/memory.html#memsup-usage
 	if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
 		# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
 		vmMemoryHighWatermark="$(
-			awk '
+			echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK" | awk '
 				/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
 					perc = $0;
 					if (perc ~ /%$/) {
@@ -293,93 +300,64 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
 						printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
 						exit 1;
 					}
-					printf "%0.03f\n", perc;
+					printf "vm_memory_high_watermark.relative %0.03f\n", perc;
 					next;
 				}
 				/^[0-9]+$/ {
-					printf "{ absolute, %s }\n", $0;
+					printf "vm_memory_high_watermark.absolute %s\n", $0;
 					next;
 				}
 				/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
-					printf "{ absolute, \"%s\" }\n", $0;
+					printf "vm_memory_high_watermark.absolute %s\n", $0;
 					next;
 				}
 				{
 					printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
 					exit 1;
 				}
-			' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
+			'
 		)"
 		if [ "$vmMemoryHighWatermark" ]; then
-			# https://www.rabbitmq.com/memory.html#memsup-usage
-			rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
+			vmMemoryHighWatermarkKey="${vmMemoryHighWatermark%% *}"
+			vmMemoryHighWatermarkVal="${vmMemoryHighWatermark#$vmMemoryHighWatermarkKey }"
+			rabbit_set_config "$vmMemoryHighWatermarkKey" "$vmMemoryHighWatermarkVal"
+			case "$vmMemoryHighWatermarkKey" in
+				# make sure we only set one or the other
+				'vm_memory_high_watermark.absolute') rabbit_comment_config 'vm_memory_high_watermark.relative' ;;
+				'vm_memory_high_watermark.relative') rabbit_comment_config 'vm_memory_high_watermark.absolute' ;;
+			esac
 		fi
 	fi
 
 	if [ "$haveSslConfig" ]; then
-		IFS=$'\n'
-		rabbitSslOptions=( $(rabbit_env_config 'ssl' "${sslConfigKeys[@]}") )
-		unset IFS
-
-		rabbitConfig+=(
-			"{ tcp_listeners, $(rabbit_array) }"
-			"{ ssl_listeners, $(rabbit_array 5671) }"
-			"{ ssl_options, $(rabbit_array "${rabbitSslOptions[@]}") }"
-		)
+		rabbit_set_config 'listeners.ssl.default' 5671
+		rabbit_env_config 'ssl' "${sslConfigKeys[@]}"
 	else
-		rabbitConfig+=(
-			"{ tcp_listeners, $(rabbit_array 5672) }"
-			"{ ssl_listeners, $(rabbit_array) }"
-		)
+		rabbit_set_config 'listeners.tcp.default' 5672
 	fi
 
-	IFS=$'\n'
-	rabbitConfig+=( $(rabbit_env_config '' "${rabbitConfigKeys[@]}") )
-	unset IFS
-
-	fullConfig+=( "{ rabbit, $(rabbit_array "${rabbitConfig[@]}") }" )
+	rabbit_env_config '' "${rabbitConfigKeys[@]}"
 
 	# if management plugin is installed, generate config for it
 	# https://www.rabbitmq.com/management.html#configuration
 	if [ "$(rabbitmq-plugins list -m -e rabbitmq_management)" ]; then
-		rabbitManagementConfig=()
-
 		if [ "$haveManagementSslConfig" ]; then
-			IFS=$'\n'
-			rabbitManagementSslOptions=( $(rabbit_env_config 'management_ssl' "${sslConfigKeys[@]}") )
-			unset IFS
-
-			rabbitManagementListenerConfig+=(
-				'{ port, 15671 }'
-				'{ ssl, true }'
-				"{ ssl_opts, $(rabbit_array "${rabbitManagementSslOptions[@]}") }"
-			)
+			rabbit_set_config 'management.listener.port' 15671
+			rabbit_set_config 'management.listener.ssl' 'true'
+			rabbit_env_config 'management_ssl' "${sslConfigKeys[@]}"
 		else
-			rabbitManagementListenerConfig+=(
-				'{ port, 15672 }'
-				'{ ssl, false }'
-			)
+			rabbit_set_config 'management.listener.port' 15672
+			rabbit_set_config 'management.listener.ssl' 'false'
 		fi
-		rabbitManagementConfig+=(
-			"{ listener, $(rabbit_array "${rabbitManagementListenerConfig[@]}") }"
-		)
 
 		# if definitions file exists, then load it
 		# https://www.rabbitmq.com/management.html#load-definitions
 		managementDefinitionsFile='/etc/rabbitmq/definitions.json'
-		if [ -f "${managementDefinitionsFile}" ]; then
+		if [ -f "$managementDefinitionsFile" ]; then
 			# see also https://github.com/docker-library/rabbitmq/pull/112#issuecomment-271485550
-			rabbitManagementConfig+=(
-				"{ load_definitions, \"$managementDefinitionsFile\" }"
-			)
+			rabbit_set_config 'management.load_definitions' "$managementDefinitionsFile"
 		fi
-
-		fullConfig+=(
-			"{ rabbitmq_management, $(rabbit_array "${rabbitManagementConfig[@]}") }"
-		)
 	fi
-
-	echo "$(rabbit_array "${fullConfig[@]}")." > /etc/rabbitmq/rabbitmq.config
 fi
 
 combinedSsl='/tmp/combined.pem'
diff --git a/rabbitmq_latest/Dockerfile b/rabbitmq_latest/Dockerfile
index 7b37bb1..c52ec77 100644
--- a/rabbitmq_latest/Dockerfile
+++ b/rabbitmq_latest/Dockerfile
@@ -1,6 +1,6 @@
 FROM debian:stretch-slim
 
-RUN set -ex; \
+RUN set -eux; \
 	apt-get update; \
 	apt-get install -y --no-install-recommends \
 		gnupg \
@@ -13,20 +13,55 @@ RUN groupadd -r rabbitmq && useradd -r -d /var/lib/rabbitmq -m -g rabbitmq rabbi
 
 # grab gosu for easy step-down from root
 ENV GOSU_VERSION 1.10
-RUN set -x \
-	&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
-	&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
-	&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
-	&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
-	&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
-	&& chmod +x /usr/local/bin/gosu \
-	&& gosu nobody true \
-	&& apt-get purge -y --auto-remove ca-certificates wget
+RUN set -eux; \
+	\
+	fetchDeps=' \
+		ca-certificates \
+		wget \
+	'; \
+	apt-get update; \
+	apt-get install -y --no-install-recommends $fetchDeps; \
+	rm -rf /var/lib/apt/lists/*; \
+	\
+	dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
+	wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
+	wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
+	\
+# verify the signature
+	export GNUPGHOME="$(mktemp -d)"; \
+	gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
+	gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
+	rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
+	\
+	chmod +x /usr/local/bin/gosu; \
+# verify that the binary works
+	gosu nobody true; \
+	\
+	apt-get purge -y --auto-remove $fetchDeps
+
+# RabbitMQ 3.6.15+ requires Erlang 19.3+ (and Stretch only has 19.2); https://www.rabbitmq.com/which-erlang.html
+# so we'll pull Erlang from Buster instead (not using Erlang Solutions since their multiarch support is extremely limited)
+RUN set -eux; \
+# add buster sources.list
+	sed 's/stretch/buster/g' /etc/apt/sources.list \
+		| tee /etc/apt/sources.list.d/buster.list; \
+# update apt-preferences such that we get only erlang* from buster (and erlang* only from buster)
+	{ \
+		echo 'Package: *'; \
+		echo 'Pin: release n=buster*'; \
+		echo 'Pin-Priority: -10'; \
+		echo; \
+		echo 'Package: erlang*'; \
+		echo 'Pin: release n=buster*'; \
+		echo 'Pin-Priority: 999'; \
+		echo; \
+		echo 'Package: erlang*'; \
+		echo 'Pin: release n=stretch*'; \
+		echo 'Pin-Priority: -10'; \
+	} | tee /etc/apt/preferences.d/buster-erlang
 
 # install Erlang
-RUN set -ex; \
+RUN set -eux; \
 	apt-get update; \
 # "erlang-base-hipe" is optional (and only supported on a few arches)
 # so, only install it if it's available for our current arch
@@ -60,11 +95,11 @@ ENV PATH /usr/lib/rabbitmq/bin:$PATH
 # gpg: key 6026DFCA: public key "RabbitMQ Release Signing Key <info@rabbitmq.com>" imported
 ENV RABBITMQ_GPG_KEY 0A9AF2115F4687BD29803A206B73A36E6026DFCA
 
-ENV RABBITMQ_VERSION 3.6.14
-ENV RABBITMQ_GITHUB_TAG rabbitmq_v3_6_14
-ENV RABBITMQ_DEBIAN_VERSION 3.6.14-1
+ENV RABBITMQ_VERSION 3.7.0
+ENV RABBITMQ_GITHUB_TAG v3.7.0
+ENV RABBITMQ_DEBIAN_VERSION 3.7.0-1
 
-RUN set -ex; \
+RUN set -eux; \
 	\
 	apt-get update; \
 	apt-get install -y --no-install-recommends ca-certificates wget; \
@@ -85,6 +120,9 @@ RUN set -ex; \
 	\
 	rm -rf /var/lib/apt/lists/*
 
+# warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
+ENV LANG C.UTF-8
+
 # set home so that any `--user` knows where to put the erlang cookie
 ENV HOME /var/lib/rabbitmq
 
diff --git a/rabbitmq_latest/docker-entrypoint.sh b/rabbitmq_latest/docker-entrypoint.sh
index 3f78ac0..4c8fa3d 100755
--- a/rabbitmq_latest/docker-entrypoint.sh
+++ b/rabbitmq_latest/docker-entrypoint.sh
@@ -156,7 +156,7 @@ for conf in "${!configDefaults[@]}"; do
 	eval "export $var=\"\$default\""
 done
 
-# If long & short hostnames are not the same, use long hostnames
+# if long and short hostnames are not the same, use long hostnames
 if [ "$(hostname)" != "$(hostname -s)" ]; then
 	: "${RABBITMQ_USE_LONGNAME:=true}"
 fi
@@ -175,87 +175,92 @@ if [ "${RABBITMQ_ERLANG_COOKIE:-}" ]; then
 	chmod 600 "$cookieFile"
 fi
 
-# prints "$2$1$3$1...$N"
-join() {
-	local sep="$1"; shift
-	local out; printf -v out "${sep//%/%%}%s" "$@"
-	echo "${out#$sep}"
-}
-indent() {
-	if [ "$#" -gt 0 ]; then
-		echo "$@"
-	else
-		cat
-	fi | sed 's/^/\t/g'
+configBase="${RABBITMQ_CONFIG_FILE:-/etc/rabbitmq/rabbitmq}"
+oldConfigFile="$configBase.config"
+newConfigFile="$configBase.conf"
+
+shouldWriteConfig="$haveConfig"
+if [ -n "$shouldWriteConfig" ] && [ -f "$oldConfigFile" ]; then
+	{
+		echo "error: Docker configuration environment variables specified, but old-style (Erlang syntax) configuration file '$oldConfigFile' exists"
+		echo "  Suggested fixes: (choose one)"
+		echo "   - remove '$oldConfigFile'"
+		echo "   - remove any Docker-specific 'RABBITMQ_...' environment variables"
+		echo "   - convert '$oldConfigFile' to the newer sysctl format ('$newConfigFile'); see https://www.rabbitmq.com/configure.html#config-file"
+	} >&2
+	exit 1
+fi
+if [ -z "$shouldWriteConfig" ] && [ ! -f "$oldConfigFile" ] && [ ! -f "$newConfigFile" ]; then
+	# no config files, we should write one
+	shouldWriteConfig=1
+fi
+
+# http://stackoverflow.com/a/2705678/433558
+sed_escape_lhs() {
+	echo "$@" | sed -e 's/[]\/$*.^|[]/\\&/g'
 }
-rabbit_array() {
-	echo -n '['
-	case "$#" in
-		0) echo -n ' ' ;;
-		1) echo -n " $1 " ;;
-		*)
-			local vals="$(join $',\n' "$@")"
-			echo
-			indent "$vals"
-	esac
-	echo -n ']'
+sed_escape_rhs() {
+	echo "$@" | sed -e 's/[\/&]/\\&/g'
 }
-rabbit_string() {
+rabbit_set_config() {
+	local key="$1"; shift
 	local val="$1"; shift
-	# fire up erlang directly to have it do the proper escaping for us
-	erl -noinput -eval 'io:format("~p\n", init:get_plain_arguments()), init:stop().' -- "$val"
+
+	[ -e "$newConfigFile" ] || touch "$newConfigFile"
+
+	local sedKey="$(sed_escape_lhs "$key")"
+	local sedVal="$(sed_escape_rhs "$val")"
+	sed -ri \
+		"s/^[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*)\S.*\$/\1${sedVal}/" \
+		"$newConfigFile"
+	if ! grep -qE "^${sedKey}[[:space:]]*=" "$newConfigFile"; then
+		echo "$key = $val" >> "$newConfigFile"
+	fi
+}
+rabbit_comment_config() {
+	local key="$1"; shift
+
+	[ -e "$newConfigFile" ] || touch "$newConfigFile"
+
+	local sedKey="$(sed_escape_lhs "$key")"
+	sed -ri \
+		"s/^[[:space:]]*#?[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*\S.*)\$/# \1/" \
+		"$newConfigFile"
 }
 rabbit_env_config() {
 	local prefix="$1"; shift
 
-	local ret=()
 	local conf
 	for conf; do
 		local var="rabbitmq${prefix:+_$prefix}_$conf"
 		var="${var^^}"
 
-		local val="${!var:-}"
+		local key="$conf"
+		case "$prefix" in
+			ssl) key="ssl_options.$key" ;;
+			management_ssl) key="management.listener.ssl_opts.$key" ;;
+		esac
 
-		local rawVal=
+		local val="${!var:-}"
+		local rawVal="$val"
 		case "$conf" in
-			verify|fail_if_no_peer_cert|depth)
-				[ "$val" ] || continue
-				rawVal="$val"
-				;;
-
-			hipe_compile)
-				[ "$val" ] && rawVal='true' || rawVal='false'
-				;;
-
-			cacertfile|certfile|keyfile)
-				[ "$val" ] || continue
-				rawVal="$(rabbit_string "$val")"
+			verify|fail_if_no_peer_cert|depth|hipe_compile)
+				[ -n "$val" ] && rawVal='true' || rawVal='false'
 				;;
 
-			*)
-				[ "$val" ] || continue
-				rawVal="<<$(rabbit_string "$val")>>"
-				;;
+			vm_memory_high_watermark) continue ;; # handled separately
 		esac
-		[ "$rawVal" ] || continue
 
-		ret+=( "{ $conf, $rawVal }" )
+		if [ -n "$rawVal" ]; then
+			rabbit_set_config "$key" "$rawVal"
+		else
+			rabbit_comment_config "$key"
+		fi
 	done
-
-	join $'\n' "${ret[@]}"
 }
 
-shouldWriteConfig="$haveConfig"
-if [ ! -f /etc/rabbitmq/rabbitmq.config ]; then
-	shouldWriteConfig=1
-fi
-
 if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
-	fullConfig=()
-
-	rabbitConfig=(
-		"{ loopback_users, $(rabbit_array) }"
-	)
+	rabbit_set_config 'loopback_users.guest' 'false'
 
 	# determine whether to set "vm_memory_high_watermark" (based on cgroups)
 	memTotalKb=
@@ -277,12 +282,14 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
 	if [ -n "$memLimitB" ]; then
 		# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
 		# https://github.com/rabbitmq/rabbitmq-server/pull/1234
-		rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
+		:# TODO rabbit_set_config 'total_memory_available_override_value' "$memLimitB"
+		# TODO https://github.com/rabbitmq/rabbitmq-server/issues/1445 (missing in 3.7.0)
 	fi
+	# https://www.rabbitmq.com/memory.html#memsup-usage
 	if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
 		# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
 		vmMemoryHighWatermark="$(
-			awk '
+			echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK" | awk '
 				/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
 					perc = $0;
 					if (perc ~ /%$/) {
@@ -293,93 +300,64 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
 						printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
 						exit 1;
 					}
-					printf "%0.03f\n", perc;
+					printf "vm_memory_high_watermark.relative %0.03f\n", perc;
 					next;
 				}
 				/^[0-9]+$/ {
-					printf "{ absolute, %s }\n", $0;
+					printf "vm_memory_high_watermark.absolute %s\n", $0;
 					next;
 				}
 				/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
-					printf "{ absolute, \"%s\" }\n", $0;
+					printf "vm_memory_high_watermark.absolute %s\n", $0;
 					next;
 				}
 				{
 					printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
 					exit 1;
 				}
-			' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
+			'
 		)"
 		if [ "$vmMemoryHighWatermark" ]; then
-			# https://www.rabbitmq.com/memory.html#memsup-usage
-			rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
+			vmMemoryHighWatermarkKey="${vmMemoryHighWatermark%% *}"
+			vmMemoryHighWatermarkVal="${vmMemoryHighWatermark#$vmMemoryHighWatermarkKey }"
+			rabbit_set_config "$vmMemoryHighWatermarkKey" "$vmMemoryHighWatermarkVal"
+			case "$vmMemoryHighWatermarkKey" in
+				# make sure we only set one or the other
+				'vm_memory_high_watermark.absolute') rabbit_comment_config 'vm_memory_high_watermark.relative' ;;
+				'vm_memory_high_watermark.relative') rabbit_comment_config 'vm_memory_high_watermark.absolute' ;;
+			esac
 		fi
 	fi
 
 	if [ "$haveSslConfig" ]; then
-		IFS=$'\n'
-		rabbitSslOptions=( $(rabbit_env_config 'ssl' "${sslConfigKeys[@]}") )
-		unset IFS
-
-		rabbitConfig+=(
-			"{ tcp_listeners, $(rabbit_array) }"
-			"{ ssl_listeners, $(rabbit_array 5671) }"
-			"{ ssl_options, $(rabbit_array "${rabbitSslOptions[@]}") }"
-		)
+		rabbit_set_config 'listeners.ssl.default' 5671
+		rabbit_env_config 'ssl' "${sslConfigKeys[@]}"
 	else
-		rabbitConfig+=(
-			"{ tcp_listeners, $(rabbit_array 5672) }"
-			"{ ssl_listeners, $(rabbit_array) }"
-		)
+		rabbit_set_config 'listeners.tcp.default' 5672
 	fi
 
-	IFS=$'\n'
-	rabbitConfig+=( $(rabbit_env_config '' "${rabbitConfigKeys[@]}") )
-	unset IFS
-
-	fullConfig+=( "{ rabbit, $(rabbit_array "${rabbitConfig[@]}") }" )
+	rabbit_env_config '' "${rabbitConfigKeys[@]}"
 
 	# if management plugin is installed, generate config for it
 	# https://www.rabbitmq.com/management.html#configuration
 	if [ "$(rabbitmq-plugins list -m -e rabbitmq_management)" ]; then
-		rabbitManagementConfig=()
-
 		if [ "$haveManagementSslConfig" ]; then
-			IFS=$'\n'
-			rabbitManagementSslOptions=( $(rabbit_env_config 'management_ssl' "${sslConfigKeys[@]}") )
-			unset IFS
-
-			rabbitManagementListenerConfig+=(
-				'{ port, 15671 }'
-				'{ ssl, true }'
-				"{ ssl_opts, $(rabbit_array "${rabbitManagementSslOptions[@]}") }"
-			)
+			rabbit_set_config 'management.listener.port' 15671
+			rabbit_set_config 'management.listener.ssl' 'true'
+			rabbit_env_config 'management_ssl' "${sslConfigKeys[@]}"
 		else
-			rabbitManagementListenerConfig+=(
-				'{ port, 15672 }'
-				'{ ssl, false }'
-			)
+			rabbit_set_config 'management.listener.port' 15672
+			rabbit_set_config 'management.listener.ssl' 'false'
 		fi
-		rabbitManagementConfig+=(
-			"{ listener, $(rabbit_array "${rabbitManagementListenerConfig[@]}") }"
-		)
 
 		# if definitions file exists, then load it
 		# https://www.rabbitmq.com/management.html#load-definitions
 		managementDefinitionsFile='/etc/rabbitmq/definitions.json'
-		if [ -f "${managementDefinitionsFile}" ]; then
+		if [ -f "$managementDefinitionsFile" ]; then
 			# see also https://github.com/docker-library/rabbitmq/pull/112#issuecomment-271485550
-			rabbitManagementConfig+=(
-				"{ load_definitions, \"$managementDefinitionsFile\" }"
-			)
+			rabbit_set_config 'management.load_definitions' "$managementDefinitionsFile"
 		fi
-
-		fullConfig+=(
-			"{ rabbitmq_management, $(rabbit_array "${rabbitManagementConfig[@]}") }"
-		)
 	fi
-
-	echo "$(rabbit_array "${fullConfig[@]}")." > /etc/rabbitmq/rabbitmq.config
 fi
 
 combinedSsl='/tmp/combined.pem'
diff --git a/rabbitmq_management-alpine/Dockerfile b/rabbitmq_management-alpine/Dockerfile
index 578f07c..22bbaf8 100644
--- a/rabbitmq_management-alpine/Dockerfile
+++ b/rabbitmq_management-alpine/Dockerfile
@@ -1,27 +1,5 @@
-FROM rabbitmq:3.6-alpine
+FROM rabbitmq:3.7-alpine
 
 RUN rabbitmq-plugins enable --offline rabbitmq_management
 
-# extract "rabbitmqadmin" from inside the "rabbitmq_management-X.Y.Z.ez" plugin zipfile
-# see https://github.com/docker-library/rabbitmq/issues/207
-RUN set -eux; \
-	erl -noinput -eval ' \
-		{ ok, AdminBin } = zip:foldl(fun(FileInArchive, GetInfo, GetBin, Acc) -> \
-			case Acc of \
-				"" -> \
-					case lists:suffix("/rabbitmqadmin", FileInArchive) of \
-						true -> GetBin(); \
-						false -> Acc \
-					end; \
-				_ -> Acc \
-			end \
-		end, "", init:get_plain_arguments()), \
-		io:format("~s", [ AdminBin ]), \
-		init:stop(). \
-	' -- /plugins/rabbitmq_management-*.ez > /usr/local/bin/rabbitmqadmin; \
-	[ -s /usr/local/bin/rabbitmqadmin ]; \
-	chmod +x /usr/local/bin/rabbitmqadmin; \
-	apk add --no-cache python; \
-	rabbitmqadmin --version
-
 EXPOSE 15671 15672
diff --git a/rabbitmq_management/Dockerfile b/rabbitmq_management/Dockerfile
index dcb3d0a..99cacc6 100644
--- a/rabbitmq_management/Dockerfile
+++ b/rabbitmq_management/Dockerfile
@@ -1,29 +1,5 @@
-FROM rabbitmq:3.6
+FROM rabbitmq:3.7
 
 RUN rabbitmq-plugins enable --offline rabbitmq_management
 
-# extract "rabbitmqadmin" from inside the "rabbitmq_management-X.Y.Z.ez" plugin zipfile
-# see https://github.com/docker-library/rabbitmq/issues/207
-RUN set -eux; \
-	erl -noinput -eval ' \
-		{ ok, AdminBin } = zip:foldl(fun(FileInArchive, GetInfo, GetBin, Acc) -> \
-			case Acc of \
-				"" -> \
-					case lists:suffix("/rabbitmqadmin", FileInArchive) of \
-						true -> GetBin(); \
-						false -> Acc \
-					end; \
-				_ -> Acc \
-			end \
-		end, "", init:get_plain_arguments()), \
-		io:format("~s", [ AdminBin ]), \
-		init:stop(). \
-	' -- /plugins/rabbitmq_management-*.ez > /usr/local/bin/rabbitmqadmin; \
-	[ -s /usr/local/bin/rabbitmqadmin ]; \
-	chmod +x /usr/local/bin/rabbitmqadmin; \
-	apt-get update; \
-	apt-get install -y --no-install-recommends python; \
-	rm -rf /var/lib/apt/lists/*; \
-	rabbitmqadmin --version
-
 EXPOSE 15671 15672
diff --git a/ruby_rc-alpine3.6/Dockerfile b/ruby_rc-alpine3.6/Dockerfile
deleted file mode 100644
index f3c061c..0000000

@yosifkit
Copy link
Member

Build test of #3795; af70af8; amd64 (bash, golang, rabbitmq, ruby):

$ bashbrew build bash:4.4.12
Building bashbrew/cache:ff70cd578e8a04cd31020ba831c7a4b72df53f4720fa90f4f0c0ec0a65aa15e4 (bash:4.4.12)
Tagging bash:4.4.12
Tagging bash:4.4
Tagging bash:4
Tagging bash:latest

$ test/run.sh bash:4.4.12
testing bash:4.4.12
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:4.3.48
Building bashbrew/cache:a23e4bdd3f263deb59d0d5ad5fa0ba3476d9d1e5ad55e9fc4379c2f1cf3d2643 (bash:4.3.48)
Tagging bash:4.3.48
Tagging bash:4.3

$ test/run.sh bash:4.3.48
testing bash:4.3.48
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:4.2.53
Building bashbrew/cache:b81535cd9edf7f20ac0c8b6ae68c4b006157af70e6c1ae71e8f380783d117d9e (bash:4.2.53)
Tagging bash:4.2.53
Tagging bash:4.2

$ test/run.sh bash:4.2.53
testing bash:4.2.53
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:4.1.17
Building bashbrew/cache:3635651d6b217bd19035f1df9da80688bb2ab883ce86720ee2063a32e8a25593 (bash:4.1.17)
Tagging bash:4.1.17
Tagging bash:4.1

$ test/run.sh bash:4.1.17
testing bash:4.1.17
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:4.0.44
Building bashbrew/cache:1ead90ae0586783c378a0ae4c84fdfde54573a4991ddc07a66bc1e8c7bcd0687 (bash:4.0.44)
Tagging bash:4.0.44
Tagging bash:4.0

$ test/run.sh bash:4.0.44
testing bash:4.0.44
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:3.2.57
Building bashbrew/cache:41f2cd7e8ecbf7b127ba611d09b8d51daf4f6826162caf2b257fcdb302e95b9d (bash:3.2.57)
Tagging bash:3.2.57
Tagging bash:3.2
Tagging bash:3

$ test/run.sh bash:3.2.57
testing bash:3.2.57
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:3.1.23
Building bashbrew/cache:7d181b11cfb83bd78d501f9974fce16c54660c9464a102871920f3f808a42ea6 (bash:3.1.23)
Tagging bash:3.1.23
Tagging bash:3.1

$ test/run.sh bash:3.1.23
testing bash:3.1.23
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed


$ bashbrew build bash:3.0.22
Building bashbrew/cache:c4daefc4fb38821e0bc7ca1010f69c1f62ca4648505d14b8a26025ad194ee951 (bash:3.0.22)
Tagging bash:3.0.22
Tagging bash:3.0

$ test/run.sh bash:3.0.22
testing bash:3.0.22
	'utc' [1/4]...passed
	'cve-2014--shellshock' [2/4]...passed
	'no-hard-coded-passwords' [3/4]...passed
	'override-cmd' [4/4]...passed
$ bashbrew build golang:1.10beta1-stretch
Using bashbrew/cache:aa33214539a9d07052dcc1d9961dbc8eca358941192c7112371c2fad3d3f7b63 (golang:1.10beta1-stretch)
Tagging golang:1.10beta1-stretch
Tagging golang:1.10-rc-stretch
Tagging golang:rc-stretch
Tagging golang:1.10beta1
Tagging golang:1.10-rc
Tagging golang:rc

$ test/run.sh golang:1.10beta1-stretch
testing golang:1.10beta1-stretch
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.10beta1-alpine3.7
Using bashbrew/cache:63c19439140e4b6c6e0b03d55c4eb685b31981dfa1f0134d4ca53bfa4c512049 (golang:1.10beta1-alpine3.7)
Tagging golang:1.10beta1-alpine3.7
Tagging golang:1.10-rc-alpine3.7
Tagging golang:rc-alpine3.7
Tagging golang:1.10beta1-alpine
Tagging golang:1.10-rc-alpine
Tagging golang:rc-alpine

$ test/run.sh golang:1.10beta1-alpine3.7
testing golang:1.10beta1-alpine3.7
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.10beta1-windowsservercore-ltsc2016
skipping "golang:1.10beta1-windowsservercore-ltsc2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.10beta1-windowsservercore-ltsc2016
testing golang:1.10beta1-windowsservercore-ltsc2016
	image does not exist!


$ bashbrew build golang:1.10beta1-windowsservercore-1709
skipping "golang:1.10beta1-windowsservercore-1709" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.10beta1-windowsservercore-1709
testing golang:1.10beta1-windowsservercore-1709
	image does not exist!


$ bashbrew build golang:1.10beta1-nanoserver-sac2016
skipping "golang:1.10beta1-nanoserver-sac2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.10beta1-nanoserver-sac2016
testing golang:1.10beta1-nanoserver-sac2016
	image does not exist!


$ bashbrew build golang:1.9.2-stretch
Using bashbrew/cache:a4bcf94813bea663b4682a3252f09f44937a03d3dae0267d8be7e9109dbe14f0 (golang:1.9.2-stretch)
Tagging golang:1.9.2-stretch
Tagging golang:1.9-stretch
Tagging golang:1-stretch
Tagging golang:stretch
Tagging golang:1.9.2
Tagging golang:1.9
Tagging golang:1
Tagging golang:latest

$ test/run.sh golang:1.9.2-stretch
testing golang:1.9.2-stretch
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.9.2-alpine3.7
Building bashbrew/cache:82a9b38c8e300f0d3f432ef76aa4e32e6b5b9d389f0558706c380adf84a77ffe (golang:1.9.2-alpine3.7)
Tagging golang:1.9.2-alpine3.7
Tagging golang:1.9-alpine3.7
Tagging golang:1-alpine3.7
Tagging golang:alpine3.7

$ test/run.sh golang:1.9.2-alpine3.7
testing golang:1.9.2-alpine3.7
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.9.2-alpine3.6
Using bashbrew/cache:a9532af9f9f6075971026696b8d53d465f51d74f4ae5f60b75629b4dcf6e6d94 (golang:1.9.2-alpine3.6)
Tagging golang:1.9.2-alpine3.6
Tagging golang:1.9-alpine3.6
Tagging golang:1-alpine3.6
Tagging golang:alpine3.6
Tagging golang:1.9.2-alpine
Tagging golang:1.9-alpine
Tagging golang:1-alpine
Tagging golang:alpine

$ test/run.sh golang:1.9.2-alpine3.6
testing golang:1.9.2-alpine3.6
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.9.2-windowsservercore-ltsc2016
skipping "golang:1.9.2-windowsservercore-ltsc2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.9.2-windowsservercore-ltsc2016
testing golang:1.9.2-windowsservercore-ltsc2016
	image does not exist!


$ bashbrew build golang:1.9.2-windowsservercore-1709
skipping "golang:1.9.2-windowsservercore-1709" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.9.2-windowsservercore-1709
testing golang:1.9.2-windowsservercore-1709
	image does not exist!


$ bashbrew build golang:1.9.2-nanoserver-sac2016
skipping "golang:1.9.2-nanoserver-sac2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.9.2-nanoserver-sac2016
testing golang:1.9.2-nanoserver-sac2016
	image does not exist!


$ bashbrew build golang:1.8.5-stretch
Using bashbrew/cache:7c222ec155f6f029df0e0af9b9088536b7f4dbb6fcb924d1a0f224f63d2133cb (golang:1.8.5-stretch)
Tagging golang:1.8.5-stretch
Tagging golang:1.8-stretch

$ test/run.sh golang:1.8.5-stretch
testing golang:1.8.5-stretch
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.8.5-jessie
Using bashbrew/cache:8391373d982dfe10ef3ed770ea4bf38e42a195763911348bad7ec58f00a4fe53 (golang:1.8.5-jessie)
Tagging golang:1.8.5-jessie
Tagging golang:1.8-jessie
Tagging golang:1.8.5
Tagging golang:1.8

$ test/run.sh golang:1.8.5-jessie
testing golang:1.8.5-jessie
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.8.5-alpine3.6
Using bashbrew/cache:f4c89c4145c2feaad08b78ce831572ed1e828073d61c2810e595a6c0ecce0cde (golang:1.8.5-alpine3.6)
Tagging golang:1.8.5-alpine3.6
Tagging golang:1.8-alpine3.6

$ test/run.sh golang:1.8.5-alpine3.6
testing golang:1.8.5-alpine3.6
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.8.5-alpine3.5
Using bashbrew/cache:692a2bbb20b41aa1a44a4047fded6d2f3d78e77d5fe1d4ebbe6a330f007697c3 (golang:1.8.5-alpine3.5)
Tagging golang:1.8.5-alpine3.5
Tagging golang:1.8-alpine3.5
Tagging golang:1.8.5-alpine
Tagging golang:1.8-alpine

$ test/run.sh golang:1.8.5-alpine3.5
testing golang:1.8.5-alpine3.5
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'golang-hello-world' [5/5]...passed


$ bashbrew build golang:1.8.5-onbuild
Using bashbrew/cache:2db84e0942177d8099534fee7f1161aeff9c756b4ec7e3774f8baf0a508bc228 (golang:1.8.5-onbuild)
Tagging golang:1.8.5-onbuild
Tagging golang:1.8-onbuild

$ test/run.sh golang:1.8.5-onbuild
testing golang:1.8.5-onbuild
	'override-cmd' [1/1]...passed


$ bashbrew build golang:1.8.5-windowsservercore-ltsc2016
skipping "golang:1.8.5-windowsservercore-ltsc2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.8.5-windowsservercore-ltsc2016
testing golang:1.8.5-windowsservercore-ltsc2016
	image does not exist!


$ bashbrew build golang:1.8.5-windowsservercore-1709
skipping "golang:1.8.5-windowsservercore-1709" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.8.5-windowsservercore-1709
testing golang:1.8.5-windowsservercore-1709
	image does not exist!


$ bashbrew build golang:1.8.5-nanoserver-sac2016
skipping "golang:1.8.5-nanoserver-sac2016" (due to architecture "amd64"; only "windows-amd64" supported)

$ test/run.sh golang:1.8.5-nanoserver-sac2016
testing golang:1.8.5-nanoserver-sac2016
	image does not exist!
$ bashbrew build rabbitmq:3.7.0
Building bashbrew/cache:372c0772af063d7cb12ab3d40d31b8ca06382fa7e9c6c682657fc7c0c80889db (rabbitmq:3.7.0)
Tagging rabbitmq:3.7.0
Tagging rabbitmq:3.7
Tagging rabbitmq:3
Tagging rabbitmq:latest

$ test/run.sh rabbitmq:3.7.0
testing rabbitmq:3.7.0
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5]....passed


$ bashbrew build rabbitmq:3.7.0-management
Building bashbrew/cache:5c48f42ee9a4fe92826269c73d2d315a744407133f3dbb81464c0c3e699e2676 (rabbitmq:3.7.0-management)
Tagging rabbitmq:3.7.0-management
Tagging rabbitmq:3.7-management
Tagging rabbitmq:3-management
Tagging rabbitmq:management

$ test/run.sh rabbitmq:3.7.0-management
testing rabbitmq:3.7.0-management
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5].....passed


$ bashbrew build rabbitmq:3.7.0-alpine
Building bashbrew/cache:be6815dab70ff18cac89625e5a5dc6bad32e5b0b840739af3728acc89db78b1a (rabbitmq:3.7.0-alpine)
Tagging rabbitmq:3.7.0-alpine
Tagging rabbitmq:3.7-alpine
Tagging rabbitmq:3-alpine
Tagging rabbitmq:alpine

$ test/run.sh rabbitmq:3.7.0-alpine
testing rabbitmq:3.7.0-alpine
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5]....passed


$ bashbrew build rabbitmq:3.7.0-management-alpine
Building bashbrew/cache:206c5066437884a4706d2cf6140e913f441264e296ab623055f7a581aa2eeeaa (rabbitmq:3.7.0-management-alpine)
Tagging rabbitmq:3.7.0-management-alpine
Tagging rabbitmq:3.7-management-alpine
Tagging rabbitmq:3-management-alpine
Tagging rabbitmq:management-alpine

$ test/run.sh rabbitmq:3.7.0-management-alpine
testing rabbitmq:3.7.0-management-alpine
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5].....passed


$ bashbrew build rabbitmq:3.6.14
Building bashbrew/cache:25b20d4133a416f068895894e2f2b4a9b0d6bb7a134737472123f024a6889918 (rabbitmq:3.6.14)
Tagging rabbitmq:3.6.14
Tagging rabbitmq:3.6

$ test/run.sh rabbitmq:3.6.14
testing rabbitmq:3.6.14
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5]....passed


$ bashbrew build rabbitmq:3.6.14-management
Building bashbrew/cache:e87c1d5748d63bab26ea3a291cb8a57eefb2019e7c5b3a8e1569a90326331996 (rabbitmq:3.6.14-management)
Tagging rabbitmq:3.6.14-management
Tagging rabbitmq:3.6-management

$ test/run.sh rabbitmq:3.6.14-management
testing rabbitmq:3.6.14-management
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5].....passed


$ bashbrew build rabbitmq:3.6.14-alpine
Building bashbrew/cache:40b39abfe1bef6d0553ee348496e899fe7cb77399776d0dcb1ca2bcc18f2fa84 (rabbitmq:3.6.14-alpine)
Tagging rabbitmq:3.6.14-alpine
Tagging rabbitmq:3.6-alpine

$ test/run.sh rabbitmq:3.6.14-alpine
testing rabbitmq:3.6.14-alpine
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5]........passed


$ bashbrew build rabbitmq:3.6.14-management-alpine
Building bashbrew/cache:dad9d73c9d20fd11ac826237fa8b4dabd2f47278cdff3ba9ff8c4f028e0dad15 (rabbitmq:3.6.14-management-alpine)
Tagging rabbitmq:3.6.14-management-alpine
Tagging rabbitmq:3.6-management-alpine

$ test/run.sh rabbitmq:3.6.14-management-alpine
testing rabbitmq:3.6.14-management-alpine
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'rabbitmq-basics' [5/5].....passed
$ bashbrew build ruby:2.5.0-preview1-stretch
Using bashbrew/cache:f29bf841976b3f162c4230802a82a4e79834d6e45368b7f75f7a5a1a6030e057 (ruby:2.5.0-preview1-stretch)
Tagging ruby:2.5.0-preview1-stretch
Tagging ruby:2.5-rc-stretch
Tagging ruby:rc-stretch
Tagging ruby:2.5.0-preview1
Tagging ruby:2.5-rc
Tagging ruby:rc

$ test/run.sh ruby:2.5.0-preview1-stretch
testing ruby:2.5.0-preview1-stretch
	'utc' [1/9]...passed
	'cve-2014--shellshock' [2/9]...passed
	'no-hard-coded-passwords' [3/9]...passed
	'override-cmd' [4/9]...passed
	'ruby-hello-world' [5/9]...passed
	'ruby-standard-libs' [6/9]...passed
	'ruby-gems' [7/9]...passed
	'ruby-bundler' [8/9]...passed
	'ruby-nonroot' [9/9]...passed


$ bashbrew build ruby:2.5.0-preview1-slim-stretch
Building bashbrew/cache:4fa62c65a3f7e3e90bd1b6fc52e5f55ae4d4bb7a77274e54404e788aca424676 (ruby:2.5.0-preview1-slim-stretch)
Tagging ruby:2.5.0-preview1-slim-stretch
Tagging ruby:2.5-rc-slim-stretch
Tagging ruby:rc-slim-stretch
Tagging ruby:2.5.0-preview1-slim
Tagging ruby:2.5-rc-slim
Tagging ruby:rc-slim

$ test/run.sh ruby:2.5.0-preview1-slim-stretch
testing ruby:2.5.0-preview1-slim-stretch
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.5.0-preview1-alpine3.7
Using bashbrew/cache:04246281cd11cc5b43e1b09fe1f49e09c16802b9a1c54f85d90b9b79ab48838a (ruby:2.5.0-preview1-alpine3.7)
Tagging ruby:2.5.0-preview1-alpine3.7
Tagging ruby:2.5-rc-alpine3.7
Tagging ruby:rc-alpine3.7
Tagging ruby:2.5.0-preview1-alpine
Tagging ruby:2.5-rc-alpine
Tagging ruby:rc-alpine

$ test/run.sh ruby:2.5.0-preview1-alpine3.7
testing ruby:2.5.0-preview1-alpine3.7
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.4.2-stretch
Using bashbrew/cache:673c96913b58a3af6c2132fc6b6c6d1334d60a45abc21e5debf3b2968aa2f5e7 (ruby:2.4.2-stretch)
Tagging ruby:2.4.2-stretch
Tagging ruby:2.4-stretch
Tagging ruby:2-stretch
Tagging ruby:stretch

$ test/run.sh ruby:2.4.2-stretch
testing ruby:2.4.2-stretch
	'utc' [1/9]...passed
	'cve-2014--shellshock' [2/9]...passed
	'no-hard-coded-passwords' [3/9]...passed
	'override-cmd' [4/9]...passed
	'ruby-hello-world' [5/9]...passed
	'ruby-standard-libs' [6/9]...passed
	'ruby-gems' [7/9]...passed
	'ruby-bundler' [8/9]...passed
	'ruby-nonroot' [9/9]...passed


$ bashbrew build ruby:2.4.2-slim-stretch
Building bashbrew/cache:1dc8b5061f4efb0200e9b98af9786a55e597f3f65ba896a55c9b91e96e376b3d (ruby:2.4.2-slim-stretch)
Tagging ruby:2.4.2-slim-stretch
Tagging ruby:2.4-slim-stretch
Tagging ruby:2-slim-stretch
Tagging ruby:slim-stretch

$ test/run.sh ruby:2.4.2-slim-stretch
testing ruby:2.4.2-slim-stretch
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.4.2-jessie
Using bashbrew/cache:87f4591dcee39c4c95f2333db7ecf1ccb6afc28fe30c6a00b8b8d6d766c86f8a (ruby:2.4.2-jessie)
Tagging ruby:2.4.2-jessie
Tagging ruby:2.4-jessie
Tagging ruby:2-jessie
Tagging ruby:jessie
Tagging ruby:2.4.2
Tagging ruby:2.4
Tagging ruby:2
Tagging ruby:latest

$ test/run.sh ruby:2.4.2-jessie
testing ruby:2.4.2-jessie
	'utc' [1/9]...passed
	'cve-2014--shellshock' [2/9]...passed
	'no-hard-coded-passwords' [3/9]...passed
	'override-cmd' [4/9]...passed
	'ruby-hello-world' [5/9]...passed
	'ruby-standard-libs' [6/9]...passed
	'ruby-gems' [7/9]...passed
	'ruby-bundler' [8/9]...passed
	'ruby-nonroot' [9/9]...passed


$ bashbrew build ruby:2.4.2-slim-jessie
Building bashbrew/cache:f25da2803eb8f5033e51cc8612be0772f2dbed8bf61001f180bacd1e6dafb7e0 (ruby:2.4.2-slim-jessie)
Tagging ruby:2.4.2-slim-jessie
Tagging ruby:2.4-slim-jessie
Tagging ruby:2-slim-jessie
Tagging ruby:slim-jessie
Tagging ruby:2.4.2-slim
Tagging ruby:2.4-slim
Tagging ruby:2-slim
Tagging ruby:slim

$ test/run.sh ruby:2.4.2-slim-jessie
testing ruby:2.4.2-slim-jessie
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.4.2-onbuild
Using bashbrew/cache:a48d4a85ae6d3bda78beb2f66701d8cdc4a42d8159e6f25e54637e9c8e5c33fb (ruby:2.4.2-onbuild)
Tagging ruby:2.4.2-onbuild
Tagging ruby:2.4-onbuild
Tagging ruby:2-onbuild
Tagging ruby:onbuild

$ test/run.sh ruby:2.4.2-onbuild
testing ruby:2.4.2-onbuild
	'override-cmd' [1/1]...passed


$ bashbrew build ruby:2.4.2-alpine3.7
Using bashbrew/cache:36bf04255fe91c371ead898bc7db0ef54994c16ccc765eb32c931b49686ca87b (ruby:2.4.2-alpine3.7)
Tagging ruby:2.4.2-alpine3.7
Tagging ruby:2.4-alpine3.7
Tagging ruby:2-alpine3.7
Tagging ruby:alpine3.7

$ test/run.sh ruby:2.4.2-alpine3.7
testing ruby:2.4.2-alpine3.7
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.4.2-alpine3.6
Using bashbrew/cache:3ff4b28ebbae944c2acb92a5c9327d3702df3957592ad213868e38d26fc113d6 (ruby:2.4.2-alpine3.6)
Tagging ruby:2.4.2-alpine3.6
Tagging ruby:2.4-alpine3.6
Tagging ruby:2-alpine3.6
Tagging ruby:alpine3.6

$ test/run.sh ruby:2.4.2-alpine3.6
testing ruby:2.4.2-alpine3.6
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.4.2-alpine3.4
Using bashbrew/cache:2278639a2f96198f7ab209fc0c428f2afe365b395c4b5586aca69affbc2e06c8 (ruby:2.4.2-alpine3.4)
Tagging ruby:2.4.2-alpine3.4
Tagging ruby:2.4-alpine3.4
Tagging ruby:2-alpine3.4
Tagging ruby:alpine3.4
Tagging ruby:2.4.2-alpine
Tagging ruby:2.4-alpine
Tagging ruby:2-alpine
Tagging ruby:alpine

$ test/run.sh ruby:2.4.2-alpine3.4
testing ruby:2.4.2-alpine3.4
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.3.5-jessie
Using bashbrew/cache:4beb6362b0316ba6847502053e516c9674dcc6bb0d20fd68cbe63e51053aa113 (ruby:2.3.5-jessie)
Tagging ruby:2.3.5-jessie
Tagging ruby:2.3-jessie
Tagging ruby:2.3.5
Tagging ruby:2.3

$ test/run.sh ruby:2.3.5-jessie
testing ruby:2.3.5-jessie
	'utc' [1/9]...passed
	'cve-2014--shellshock' [2/9]...passed
	'no-hard-coded-passwords' [3/9]...passed
	'override-cmd' [4/9]...passed
	'ruby-hello-world' [5/9]...passed
	'ruby-standard-libs' [6/9]...passed
	'ruby-gems' [7/9]...passed
	'ruby-bundler' [8/9]...passed
	'ruby-nonroot' [9/9]...passed


$ bashbrew build ruby:2.3.5-slim-jessie
Building bashbrew/cache:39230ea87569c3e904a33548f3303dd1470d69ce19c3ef6ab5e6485fbd40a3fa (ruby:2.3.5-slim-jessie)
Tagging ruby:2.3.5-slim-jessie
Tagging ruby:2.3-slim-jessie
Tagging ruby:2.3.5-slim
Tagging ruby:2.3-slim

$ test/run.sh ruby:2.3.5-slim-jessie
testing ruby:2.3.5-slim-jessie
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.3.5-onbuild
Using bashbrew/cache:a692223e7084596c2e58c06701d93bd358c583c3fd5ec292a41fa4a47b34b576 (ruby:2.3.5-onbuild)
Tagging ruby:2.3.5-onbuild
Tagging ruby:2.3-onbuild

$ test/run.sh ruby:2.3.5-onbuild
testing ruby:2.3.5-onbuild
	'override-cmd' [1/1]...passed


$ bashbrew build ruby:2.3.5-alpine3.4
Using bashbrew/cache:bba881bbb732d265412e92decf145a5771a028568814dffa3747ce33d66dca87 (ruby:2.3.5-alpine3.4)
Tagging ruby:2.3.5-alpine3.4
Tagging ruby:2.3-alpine3.4
Tagging ruby:2.3.5-alpine
Tagging ruby:2.3-alpine

$ test/run.sh ruby:2.3.5-alpine3.4
testing ruby:2.3.5-alpine3.4
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.2.8-jessie
Using bashbrew/cache:82f6f32607054cfa1cf579fbe26d6383dc75d35d3c79f446155efe5daa647ff2 (ruby:2.2.8-jessie)
Tagging ruby:2.2.8-jessie
Tagging ruby:2.2-jessie
Tagging ruby:2.2.8
Tagging ruby:2.2

$ test/run.sh ruby:2.2.8-jessie
testing ruby:2.2.8-jessie
	'utc' [1/9]...passed
	'cve-2014--shellshock' [2/9]...passed
	'no-hard-coded-passwords' [3/9]...passed
	'override-cmd' [4/9]...passed
	'ruby-hello-world' [5/9]...passed
	'ruby-standard-libs' [6/9]...passed
	'ruby-gems' [7/9]...passed
	'ruby-bundler' [8/9]...passed
	'ruby-nonroot' [9/9]...passed


$ bashbrew build ruby:2.2.8-slim-jessie
Building bashbrew/cache:5351a782ab25cda0241fc367d1e44a201e38c8e514b6886286878eaa27ed981c (ruby:2.2.8-slim-jessie)
Tagging ruby:2.2.8-slim-jessie
Tagging ruby:2.2-slim-jessie
Tagging ruby:2.2.8-slim
Tagging ruby:2.2-slim

$ test/run.sh ruby:2.2.8-slim-jessie
testing ruby:2.2.8-slim-jessie
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed


$ bashbrew build ruby:2.2.8-onbuild
Using bashbrew/cache:830ee019425c2eacdd2f312ec19c76130cfd380812ce9d5adcbdbd04b415cf45 (ruby:2.2.8-onbuild)
Tagging ruby:2.2.8-onbuild
Tagging ruby:2.2-onbuild

$ test/run.sh ruby:2.2.8-onbuild
testing ruby:2.2.8-onbuild
	'override-cmd' [1/1]...passed


$ bashbrew build ruby:2.2.8-alpine3.4
Using bashbrew/cache:f511c27946f3a1d8e125e4ea2a018f4213345141d74f6020de699904bc460379 (ruby:2.2.8-alpine3.4)
Tagging ruby:2.2.8-alpine3.4
Tagging ruby:2.2-alpine3.4
Tagging ruby:2.2.8-alpine
Tagging ruby:2.2-alpine

$ test/run.sh ruby:2.2.8-alpine3.4
testing ruby:2.2.8-alpine3.4
	'utc' [1/7]...passed
	'cve-2014--shellshock' [2/7]...passed
	'no-hard-coded-passwords' [3/7]...passed
	'override-cmd' [4/7]...passed
	'ruby-hello-world' [5/7]...passed
	'ruby-standard-libs' [6/7]...passed
	'ruby-nonroot' [7/7]...passed

The following images failed at least one test:

  • golang:
    • golang:1.10beta1-windowsservercore-ltsc2016
    • golang:1.10beta1-windowsservercore-1709
    • golang:1.10beta1-nanoserver-sac2016
    • golang:1.9.2-windowsservercore-ltsc2016
    • golang:1.9.2-windowsservercore-1709
    • golang:1.9.2-nanoserver-sac2016
    • golang:1.8.5-windowsservercore-ltsc2016
    • golang:1.8.5-windowsservercore-1709
    • golang:1.8.5-nanoserver-sac2016

@yosifkit yosifkit merged commit 8a5e9c7 into docker-library:master Dec 12, 2017
@yosifkit yosifkit deleted the update-docker-library branch December 12, 2017 20:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants