Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update jetty to include jdk13 and slim images #7134

Merged
merged 8 commits into from
Jan 22, 2020

Conversation

gregw
Copy link
Contributor

@gregw gregw commented Dec 16, 2019

These images are based of a new staged Dockerfile and support JDK11, 13 and slim varients. The alpine varients are dropped.

Signed-off-by: Greg Wilkins gregw@webtide.com

Signed-off-by: Greg Wilkins <gregw@webtide.com>
@yosifkit
Copy link
Member

Diff:
diff --git a/_bashbrew-arches b/_bashbrew-arches
index 6e812ba..1ccbd81 100644
--- a/_bashbrew-arches
+++ b/_bashbrew-arches
@@ -1,44 +1,11 @@
+jetty:9-jdk13-slim @ amd64
+jetty:9-jdk13-slim @ arm64v8
+jetty:9-jre8 @ amd64
 jetty:9-jre11 @ amd64
-jetty:9-jre11 @ arm32v5
-jetty:9-jre11 @ arm32v7
 jetty:9-jre11 @ arm64v8
-jetty:9-jre11 @ i386
-jetty:9-jre11 @ ppc64le
-jetty:9-jre11 @ s390x
+jetty:9-jre11-slim @ amd64
+jetty:9-jre11-slim @ arm64v8
 jetty:9.2-jre8 @ amd64
-jetty:9.2-jre8 @ arm32v5
-jetty:9.2-jre8 @ arm32v7
-jetty:9.2-jre8 @ arm64v8
-jetty:9.2-jre8 @ i386
-jetty:9.2-jre8 @ ppc64le
-jetty:9.2-jre8 @ s390x
 jetty:9.3-jre8 @ amd64
-jetty:9.3-jre8 @ arm32v5
-jetty:9.3-jre8 @ arm32v7
-jetty:9.3-jre8 @ arm64v8
-jetty:9.3-jre8 @ i386
-jetty:9.3-jre8 @ ppc64le
-jetty:9.3-jre8 @ s390x
-jetty:9.3-jre8-alpine @ amd64
-jetty:9.3-jre8-alpine @ arm32v6
-jetty:9.3-jre8-alpine @ arm64v8
-jetty:9.3-jre8-alpine @ i386
-jetty:9.3-jre8-alpine @ ppc64le
-jetty:9.3-jre8-alpine @ s390x
-jetty:jre7 @ amd64
-jetty:jre7 @ arm32v5
-jetty:jre7 @ arm32v7
-jetty:jre7 @ i386
-jetty:jre8 @ amd64
-jetty:jre8 @ arm32v5
-jetty:jre8 @ arm32v7
-jetty:jre8 @ arm64v8
-jetty:jre8 @ i386
-jetty:jre8 @ ppc64le
-jetty:jre8 @ s390x
-jetty:jre8-alpine @ amd64
-jetty:jre8-alpine @ arm32v6
-jetty:jre8-alpine @ arm64v8
-jetty:jre8-alpine @ i386
-jetty:jre8-alpine @ ppc64le
-jetty:jre8-alpine @ s390x
+jetty:jdk13 @ amd64
+jetty:jdk13 @ arm64v8
diff --git a/_bashbrew-list b/_bashbrew-list
index 6e2cb87..53dab6a 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -1,35 +1,24 @@
 jetty:9
-jetty:9-alpine
-jetty:9-jre7
+jetty:9-jdk13
+jetty:9-jdk13-slim
 jetty:9-jre8
-jetty:9-jre8-alpine
 jetty:9-jre11
-jetty:9.2
-jetty:9.2-jre7
+jetty:9-jre11-slim
 jetty:9.2-jre8
-jetty:9.2.28
-jetty:9.2.28-jre7
-jetty:9.2.28-jre8
-jetty:9.3
-jetty:9.3-alpine
+jetty:9.2.29-jre8
 jetty:9.3-jre8
-jetty:9.3-jre8-alpine
-jetty:9.3.27
-jetty:9.3.27-alpine
-jetty:9.3.27-jre8
-jetty:9.3.27-jre8-alpine
+jetty:9.3.28-jre8
 jetty:9.4
-jetty:9.4-alpine
+jetty:9.4-jdk13
+jetty:9.4-jdk13-slim
 jetty:9.4-jre8
-jetty:9.4-jre8-alpine
 jetty:9.4-jre11
-jetty:9.4.18
-jetty:9.4.18-alpine
-jetty:9.4.18-jre8
-jetty:9.4.18-jre8-alpine
-jetty:9.4.18-jre11
-jetty:alpine
-jetty:jre7
-jetty:jre8
-jetty:jre8-alpine
+jetty:9.4-jre11-slim
+jetty:9.4.24
+jetty:9.4.24-jdk13
+jetty:9.4.24-jdk13-slim
+jetty:9.4.24-jre8
+jetty:9.4.24-jre11
+jetty:9.4.24-jre11-slim
+jetty:jdk13
 jetty:latest
diff --git a/jetty_jre8/Dockerfile b/jetty_9-jdk13-slim/Dockerfile
similarity index 59%
copy from jetty_jre8/Dockerfile
copy to jetty_9-jdk13-slim/Dockerfile
index c356c98..eae902a 100644
--- a/jetty_jre8/Dockerfile
+++ b/jetty_9-jdk13-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,33 +28,51 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:13-jdk-slim
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8-alpine/docker-entrypoint.sh b/jetty_9-jdk13-slim/docker-entrypoint.sh
similarity index 92%
rename from jetty_9.3-jre8-alpine/docker-entrypoint.sh
rename to jetty_9-jdk13-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8-alpine/docker-entrypoint.sh
+++ b/jetty_9-jdk13-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8-alpine/generate-jetty-start.sh b/jetty_9-jdk13-slim/generate-jetty-start.sh
similarity index 50%
rename from jetty_9.3-jre8-alpine/generate-jetty-start.sh
rename to jetty_9-jdk13-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8-alpine/generate-jetty-start.sh
+++ b/jetty_9-jdk13-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8/Dockerfile b/jetty_9-jre11-slim/Dockerfile
similarity index 59%
copy from jetty_jre8/Dockerfile
copy to jetty_9-jre11-slim/Dockerfile
index c356c98..325ef05 100644
--- a/jetty_jre8/Dockerfile
+++ b/jetty_9-jre11-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,33 +28,51 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:11-jre-slim
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11-slim/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre11-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11-slim/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre11-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9-jre11/Dockerfile b/jetty_9-jre11/Dockerfile
index 5e0fefe..e9bcceb 100644
--- a/jetty_9-jre11/Dockerfile
+++ b/jetty_9-jre11/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:11-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,32 +28,51 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:11-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8/Dockerfile b/jetty_9-jre8/Dockerfile
similarity index 60%
rename from jetty_jre8/Dockerfile
rename to jetty_9-jre8/Dockerfile
index c356c98..fa4f904 100644
--- a/jetty_jre8/Dockerfile
+++ b/jetty_9-jre8/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,33 +28,51 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:8-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre8/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre8/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.2-jre8/Dockerfile b/jetty_9.2-jre8/Dockerfile
index c9620d5..9913c6a 100644
--- a/jetty_9.2-jre8/Dockerfile
+++ b/jetty_9.2-jre8/Dockerfile
@@ -1,14 +1,10 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.2.29.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.2.28.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,52 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
+	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:8-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.2-jre8/docker-entrypoint.sh b/jetty_9.2-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.2-jre8/docker-entrypoint.sh
+++ b/jetty_9.2-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.2-jre8/generate-jetty-start.sh b/jetty_9.2-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.2-jre8/generate-jetty-start.sh
+++ b/jetty_9.2-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.3-jre8-alpine/Dockerfile b/jetty_9.3-jre8-alpine/Dockerfile
deleted file mode 100644
index f7f1bfa..0000000
diff --git a/jetty_9.3-jre8/Dockerfile b/jetty_9.3-jre8/Dockerfile
index 5160b66..6b0af09 100644
--- a/jetty_9.3-jre8/Dockerfile
+++ b/jetty_9.3-jre8/Dockerfile
@@ -1,14 +1,10 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.3.28.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.3.27.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,52 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
+	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:8-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8/docker-entrypoint.sh b/jetty_9.3-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8/docker-entrypoint.sh
+++ b/jetty_9.3-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8/generate-jetty-start.sh b/jetty_9.3-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8/generate-jetty-start.sh
+++ b/jetty_9.3-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_jdk13/Dockerfile
similarity index 58%
rename from jetty_jre8-alpine/Dockerfile
rename to jetty_jdk13/Dockerfile
index 0693965..2606300 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_jdk13/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,42 +28,51 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
+	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:13-jdk
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_jdk13/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_jdk13/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_jdk13/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_jdk13/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_jdk13/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_jdk13/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre7/Dockerfile b/jetty_jre7/Dockerfile
deleted file mode 100644
index 20bad62..0000000
diff --git a/jetty_jre7/docker-entrypoint.sh b/jetty_jre7/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre7/generate-jetty-start.sh b/jetty_jre7/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8-alpine/docker-entrypoint.sh b/jetty_jre8-alpine/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8-alpine/generate-jetty-start.sh b/jetty_jre8-alpine/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8/docker-entrypoint.sh b/jetty_jre8/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8/generate-jetty-start.sh b/jetty_jre8/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000

@gregw
Copy link
Contributor Author

gregw commented Dec 16, 2019

I'm currently am updating this PR with appropriate/docker-jetty#123 to remove the arm architecture from jdk13 images. I have reviewed all the arch files and they now only list the architectures that are listed in https://github.com/docker-library/official-images/blob/master/library/openjdk for their parent image. Standby....

Signed-off-by: Greg Wilkins <gregw@webtide.com>
Signed-off-by: Greg Wilkins <gregw@webtide.com>
Signed-off-by: Greg Wilkins <gregw@webtide.com>
@yosifkit
Copy link
Member

As noted in appropriate/docker-jetty#121:

[it] is a clever solution for docker cache sharing in local builds ... On the official images build infrastructure, "we don't have a clean way to preserve the cache for the intermediate stages", so the layers will get deleted when we clean up images that are "ripe". The practical implication of this is that since the build cache for these untagged stages could be deleted at any time, we will end up spending extra time rebuilding them and users will pull "new" images that are unchanged.

So I don't see why a rebuild would be necessary if those untagged images are deleted? I am able to delete all my untagged images and still run the images locally.

Rebuild's on the build servers can be triggered by any parent image changing. For example, if an Alpine image changes then all images FROM alpine at any version still in the library/alpine file is scheduled to rebuild. The build servers use Docker build cache very heavily to ensure that all extra builds are basically a no-op. A multi-stage build makes them not a no-op, which one reason why they are limited to a few specific exceptions.


First possible solution is to have slim and regular variants that are mostly the same (maybe using multiple template files like openjdk does that get applied across versions). A diff from a debian to the corresponding slim in openjdk reveals that they are almost identical.

Another solution would be to have one of them have the full install process while other variants of the same version COPY --from that tagged image (this would be automatically built in the correct order by the official-image build servers). This one is more complex for local development and things like TravisCI.

I lean heavily toward the first, since templates make it fairly simple to maintain (and is what we do for most of the images that we directly maintain in github.com/docker-library). I'd be up to sending an initial PR if you'd like a concrete example, but it probably wouldn't happen until after the holidays.

@gregw
Copy link
Contributor Author

gregw commented Dec 22, 2019

Geeeze you make it difficult to do good engineering! Duplication is just asking for trouble - ideally all the variants should be able to be based on the same artefact, but unfortunately all this forces us to build it again and again for each image!

Here is a PR appropriate/docker-jetty#126 that removes all the multi stage builds and duplicates the code into dockerfile into a slim variety that apt-gets the utils that it needs and then removes them! It is so fragile to do all that apt-mark magic, but if we are not allowed to copy anything from a base image, then that is the only choice!

I will leave this open to encourage review of that PR and will update when it is accepted.

Signed-off-by: Greg Wilkins <gregw@webtide.com>
@tianon
Copy link
Member

tianon commented Dec 27, 2019

Diff:
diff --git a/_bashbrew-arches b/_bashbrew-arches
index 6e812ba..7baeccb 100644
--- a/_bashbrew-arches
+++ b/_bashbrew-arches
@@ -1,44 +1,7 @@
+jetty:9-jdk13-slim @ amd64
+jetty:9-jre8 @ amd64
 jetty:9-jre11 @ amd64
-jetty:9-jre11 @ arm32v5
-jetty:9-jre11 @ arm32v7
-jetty:9-jre11 @ arm64v8
-jetty:9-jre11 @ i386
-jetty:9-jre11 @ ppc64le
-jetty:9-jre11 @ s390x
+jetty:9-jre11-slim @ amd64
 jetty:9.2-jre8 @ amd64
-jetty:9.2-jre8 @ arm32v5
-jetty:9.2-jre8 @ arm32v7
-jetty:9.2-jre8 @ arm64v8
-jetty:9.2-jre8 @ i386
-jetty:9.2-jre8 @ ppc64le
-jetty:9.2-jre8 @ s390x
 jetty:9.3-jre8 @ amd64
-jetty:9.3-jre8 @ arm32v5
-jetty:9.3-jre8 @ arm32v7
-jetty:9.3-jre8 @ arm64v8
-jetty:9.3-jre8 @ i386
-jetty:9.3-jre8 @ ppc64le
-jetty:9.3-jre8 @ s390x
-jetty:9.3-jre8-alpine @ amd64
-jetty:9.3-jre8-alpine @ arm32v6
-jetty:9.3-jre8-alpine @ arm64v8
-jetty:9.3-jre8-alpine @ i386
-jetty:9.3-jre8-alpine @ ppc64le
-jetty:9.3-jre8-alpine @ s390x
-jetty:jre7 @ amd64
-jetty:jre7 @ arm32v5
-jetty:jre7 @ arm32v7
-jetty:jre7 @ i386
-jetty:jre8 @ amd64
-jetty:jre8 @ arm32v5
-jetty:jre8 @ arm32v7
-jetty:jre8 @ arm64v8
-jetty:jre8 @ i386
-jetty:jre8 @ ppc64le
-jetty:jre8 @ s390x
-jetty:jre8-alpine @ amd64
-jetty:jre8-alpine @ arm32v6
-jetty:jre8-alpine @ arm64v8
-jetty:jre8-alpine @ i386
-jetty:jre8-alpine @ ppc64le
-jetty:jre8-alpine @ s390x
+jetty:jdk13 @ amd64
diff --git a/_bashbrew-list b/_bashbrew-list
index 6e2cb87..53dab6a 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -1,35 +1,24 @@
 jetty:9
-jetty:9-alpine
-jetty:9-jre7
+jetty:9-jdk13
+jetty:9-jdk13-slim
 jetty:9-jre8
-jetty:9-jre8-alpine
 jetty:9-jre11
-jetty:9.2
-jetty:9.2-jre7
+jetty:9-jre11-slim
 jetty:9.2-jre8
-jetty:9.2.28
-jetty:9.2.28-jre7
-jetty:9.2.28-jre8
-jetty:9.3
-jetty:9.3-alpine
+jetty:9.2.29-jre8
 jetty:9.3-jre8
-jetty:9.3-jre8-alpine
-jetty:9.3.27
-jetty:9.3.27-alpine
-jetty:9.3.27-jre8
-jetty:9.3.27-jre8-alpine
+jetty:9.3.28-jre8
 jetty:9.4
-jetty:9.4-alpine
+jetty:9.4-jdk13
+jetty:9.4-jdk13-slim
 jetty:9.4-jre8
-jetty:9.4-jre8-alpine
 jetty:9.4-jre11
-jetty:9.4.18
-jetty:9.4.18-alpine
-jetty:9.4.18-jre8
-jetty:9.4.18-jre8-alpine
-jetty:9.4.18-jre11
-jetty:alpine
-jetty:jre7
-jetty:jre8
-jetty:jre8-alpine
+jetty:9.4-jre11-slim
+jetty:9.4.24
+jetty:9.4.24-jdk13
+jetty:9.4.24-jdk13-slim
+jetty:9.4.24-jre8
+jetty:9.4.24-jre11
+jetty:9.4.24-jre11-slim
+jetty:jdk13
 jetty:latest
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_9-jdk13-slim/Dockerfile
similarity index 36%
copy from jetty_jre8-alpine/Dockerfile
copy to jetty_9-jdk13-slim/Dockerfile
index 0693965..bb8254b 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_9-jdk13-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk-slim
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,72 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+        # Save initial installatin state
+	export savedAptMark="$(apt-mark showmanual)" ; \
+	#
+        # Install utils needed to verify keys
+	apt-get update ; \
+	apt-get install -y --no-install-recommends \
+		ca-certificates p11-kit \
+		gnupg \
+		curl \
+		; \
+	#
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup any apt
+	apt-mark auto '.*' > /dev/null ; \
+	[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \
+	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \
+	rm -rf /var/lib/apt/lists/* ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8-alpine/docker-entrypoint.sh b/jetty_9-jdk13-slim/docker-entrypoint.sh
similarity index 92%
rename from jetty_9.3-jre8-alpine/docker-entrypoint.sh
rename to jetty_9-jdk13-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8-alpine/docker-entrypoint.sh
+++ b/jetty_9-jdk13-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8-alpine/generate-jetty-start.sh b/jetty_9-jdk13-slim/generate-jetty-start.sh
similarity index 50%
rename from jetty_9.3-jre8-alpine/generate-jetty-start.sh
rename to jetty_9-jdk13-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8-alpine/generate-jetty-start.sh
+++ b/jetty_9-jdk13-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_9-jre11-slim/Dockerfile
similarity index 36%
copy from jetty_jre8-alpine/Dockerfile
copy to jetty_9-jre11-slim/Dockerfile
index 0693965..02999c7 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_9-jre11-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:11-jre-slim
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,72 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+        # Save initial installatin state
+	export savedAptMark="$(apt-mark showmanual)" ; \
+	#
+        # Install utils needed to verify keys
+	apt-get update ; \
+	apt-get install -y --no-install-recommends \
+		ca-certificates p11-kit \
+		gnupg \
+		curl \
+		; \
+	#
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup any apt
+	apt-mark auto '.*' > /dev/null ; \
+	[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \
+	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \
+	rm -rf /var/lib/apt/lists/* ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11-slim/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre11-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11-slim/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre11-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9-jre11/Dockerfile b/jetty_9-jre11/Dockerfile
index 5e0fefe..bf8c67b 100644
--- a/jetty_9-jre11/Dockerfile
+++ b/jetty_9-jre11/Dockerfile
@@ -1,14 +1,11 @@
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
 FROM openjdk:11-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,33 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvf jetty.tar.gz --strip-components=1 \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8/Dockerfile b/jetty_9-jre8/Dockerfile
similarity index 43%
rename from jetty_jre8/Dockerfile
rename to jetty_9-jre8/Dockerfile
index c356c98..2cff25c 100644
--- a/jetty_jre8/Dockerfile
+++ b/jetty_9-jre8/Dockerfile
@@ -1,14 +1,11 @@
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
 FROM openjdk:8-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,34 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvf jetty.tar.gz --strip-components=1 \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre8/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre8/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.2-jre8/Dockerfile b/jetty_9.2-jre8/Dockerfile
index c9620d5..9913c6a 100644
--- a/jetty_9.2-jre8/Dockerfile
+++ b/jetty_9.2-jre8/Dockerfile
@@ -1,14 +1,10 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.2.29.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.2.28.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,52 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
+	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:8-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.2-jre8/docker-entrypoint.sh b/jetty_9.2-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.2-jre8/docker-entrypoint.sh
+++ b/jetty_9.2-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.2-jre8/generate-jetty-start.sh b/jetty_9.2-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.2-jre8/generate-jetty-start.sh
+++ b/jetty_9.2-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.3-jre8-alpine/Dockerfile b/jetty_9.3-jre8-alpine/Dockerfile
deleted file mode 100644
index f7f1bfa..0000000
diff --git a/jetty_9.3-jre8/Dockerfile b/jetty_9.3-jre8/Dockerfile
index 5160b66..6b0af09 100644
--- a/jetty_9.3-jre8/Dockerfile
+++ b/jetty_9.3-jre8/Dockerfile
@@ -1,14 +1,10 @@
-FROM openjdk:8-jre
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
+FROM openjdk:13-jdk AS Jetty94
 
+ENV JETTY_VERSION 9.3.28.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.3.27.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,52 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
+	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
 	&& rm -rf /tmp/hsperfdata_root
 
+# Start a new image on the target and import jetty
+FROM openjdk:8-jre
+
+ENV JETTY_HOME /usr/local/jetty
 ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
+ENV TMPDIR /tmp/jetty
+ENV PATH $JETTY_HOME/bin:$PATH
 
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
+COPY --from=Jetty94 $JETTY_HOME $JETTY_HOME
+COPY --from=Jetty94 $JETTY_BASE $JETTY_BASE
 
-ENV TMPDIR /tmp/jetty
 RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8/docker-entrypoint.sh b/jetty_9.3-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8/docker-entrypoint.sh
+++ b/jetty_9.3-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8/generate-jetty-start.sh b/jetty_9.3-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8/generate-jetty-start.sh
+++ b/jetty_9.3-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_jdk13/Dockerfile
similarity index 43%
rename from jetty_jre8-alpine/Dockerfile
rename to jetty_jdk13/Dockerfile
index 0693965..ab769aa 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_jdk13/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk
 
+ENV JETTY_VERSION 9.4.24.v20191120
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_jdk13/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_jdk13/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_jdk13/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_jdk13/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_jdk13/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_jdk13/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre7/Dockerfile b/jetty_jre7/Dockerfile
deleted file mode 100644
index 20bad62..0000000
diff --git a/jetty_jre7/docker-entrypoint.sh b/jetty_jre7/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre7/generate-jetty-start.sh b/jetty_jre7/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8-alpine/docker-entrypoint.sh b/jetty_jre8-alpine/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8-alpine/generate-jetty-start.sh b/jetty_jre8-alpine/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8/docker-entrypoint.sh b/jetty_jre8/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8/generate-jetty-start.sh b/jetty_jre8/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000

@yosifkit
Copy link
Member

9.4 images look fine now, but 9.2 and 9.3 are still using a multistage build. Maybe they can all use the same templates?

At least the 11-jre and 11-jre-slim versions of openjdk have arm64v8 support if you still wanted to keep it in the Architectures: list for some of them.

@kamkie
Copy link

kamkie commented Jan 15, 2020

I really could use newer jetty image
Is there some way i can help?

@gregw
Copy link
Contributor Author

gregw commented Jan 15, 2020

@kamkie we have a 9.4.26 release coming out in the next few days. I will make sure the changes requested here are made by then so we can update straight to that

@gregw
Copy link
Contributor Author

gregw commented Jan 18, 2020

@yosifkit can you look at appropriate/docker-jetty#128 and check if that is good? If so, I'll update this PR to use that once merged.

@yosifkit
Copy link
Member

Diff:
diff --git a/_bashbrew-arches b/_bashbrew-arches
index 6e812ba..9aff876 100644
--- a/_bashbrew-arches
+++ b/_bashbrew-arches
@@ -1,44 +1,9 @@
+jetty:9-jdk13-slim @ amd64
+jetty:9-jre8 @ amd64
 jetty:9-jre11 @ amd64
-jetty:9-jre11 @ arm32v5
-jetty:9-jre11 @ arm32v7
 jetty:9-jre11 @ arm64v8
-jetty:9-jre11 @ i386
-jetty:9-jre11 @ ppc64le
-jetty:9-jre11 @ s390x
+jetty:9-jre11-slim @ amd64
+jetty:9-jre11-slim @ arm64v8
 jetty:9.2-jre8 @ amd64
-jetty:9.2-jre8 @ arm32v5
-jetty:9.2-jre8 @ arm32v7
-jetty:9.2-jre8 @ arm64v8
-jetty:9.2-jre8 @ i386
-jetty:9.2-jre8 @ ppc64le
-jetty:9.2-jre8 @ s390x
 jetty:9.3-jre8 @ amd64
-jetty:9.3-jre8 @ arm32v5
-jetty:9.3-jre8 @ arm32v7
-jetty:9.3-jre8 @ arm64v8
-jetty:9.3-jre8 @ i386
-jetty:9.3-jre8 @ ppc64le
-jetty:9.3-jre8 @ s390x
-jetty:9.3-jre8-alpine @ amd64
-jetty:9.3-jre8-alpine @ arm32v6
-jetty:9.3-jre8-alpine @ arm64v8
-jetty:9.3-jre8-alpine @ i386
-jetty:9.3-jre8-alpine @ ppc64le
-jetty:9.3-jre8-alpine @ s390x
-jetty:jre7 @ amd64
-jetty:jre7 @ arm32v5
-jetty:jre7 @ arm32v7
-jetty:jre7 @ i386
-jetty:jre8 @ amd64
-jetty:jre8 @ arm32v5
-jetty:jre8 @ arm32v7
-jetty:jre8 @ arm64v8
-jetty:jre8 @ i386
-jetty:jre8 @ ppc64le
-jetty:jre8 @ s390x
-jetty:jre8-alpine @ amd64
-jetty:jre8-alpine @ arm32v6
-jetty:jre8-alpine @ arm64v8
-jetty:jre8-alpine @ i386
-jetty:jre8-alpine @ ppc64le
-jetty:jre8-alpine @ s390x
+jetty:jdk13 @ amd64
diff --git a/_bashbrew-list b/_bashbrew-list
index 6e2cb87..ec8f1ae 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -1,35 +1,24 @@
 jetty:9
-jetty:9-alpine
-jetty:9-jre7
+jetty:9-jdk13
+jetty:9-jdk13-slim
 jetty:9-jre8
-jetty:9-jre8-alpine
 jetty:9-jre11
-jetty:9.2
-jetty:9.2-jre7
+jetty:9-jre11-slim
 jetty:9.2-jre8
-jetty:9.2.28
-jetty:9.2.28-jre7
-jetty:9.2.28-jre8
-jetty:9.3
-jetty:9.3-alpine
+jetty:9.2.29-jre8
 jetty:9.3-jre8
-jetty:9.3-jre8-alpine
-jetty:9.3.27
-jetty:9.3.27-alpine
-jetty:9.3.27-jre8
-jetty:9.3.27-jre8-alpine
+jetty:9.3.28-jre8
 jetty:9.4
-jetty:9.4-alpine
+jetty:9.4-jdk13
+jetty:9.4-jdk13-slim
 jetty:9.4-jre8
-jetty:9.4-jre8-alpine
 jetty:9.4-jre11
-jetty:9.4.18
-jetty:9.4.18-alpine
-jetty:9.4.18-jre8
-jetty:9.4.18-jre8-alpine
-jetty:9.4.18-jre11
-jetty:alpine
-jetty:jre7
-jetty:jre8
-jetty:jre8-alpine
+jetty:9.4-jre11-slim
+jetty:9.4.26
+jetty:9.4.26-jdk13
+jetty:9.4.26-jdk13-slim
+jetty:9.4.26-jre8
+jetty:9.4.26-jre11
+jetty:9.4.26-jre11-slim
+jetty:jdk13
 jetty:latest
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_9-jdk13-slim/Dockerfile
similarity index 36%
copy from jetty_jre8-alpine/Dockerfile
copy to jetty_9-jdk13-slim/Dockerfile
index 0693965..68b8e7a 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_9-jdk13-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk-slim
 
+ENV JETTY_VERSION 9.4.26.v20200117
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,72 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+        # Save initial installatin state
+	export savedAptMark="$(apt-mark showmanual)" ; \
+	#
+        # Install utils needed to verify keys
+	apt-get update ; \
+	apt-get install -y --no-install-recommends \
+		ca-certificates p11-kit \
+		gnupg \
+		curl \
+		; \
+	#
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup any apt
+	apt-mark auto '.*' > /dev/null ; \
+	[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \
+	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \
+	rm -rf /var/lib/apt/lists/* ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8-alpine/docker-entrypoint.sh b/jetty_9-jdk13-slim/docker-entrypoint.sh
similarity index 92%
rename from jetty_9.3-jre8-alpine/docker-entrypoint.sh
rename to jetty_9-jdk13-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8-alpine/docker-entrypoint.sh
+++ b/jetty_9-jdk13-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8-alpine/generate-jetty-start.sh b/jetty_9-jdk13-slim/generate-jetty-start.sh
similarity index 50%
rename from jetty_9.3-jre8-alpine/generate-jetty-start.sh
rename to jetty_9-jdk13-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8-alpine/generate-jetty-start.sh
+++ b/jetty_9-jdk13-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_9-jre11-slim/Dockerfile
similarity index 36%
copy from jetty_jre8-alpine/Dockerfile
copy to jetty_9-jre11-slim/Dockerfile
index 0693965..8fabea3 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_9-jre11-slim/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:11-jre-slim
 
+ENV JETTY_VERSION 9.4.26.v20200117
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,72 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+        # Save initial installatin state
+	export savedAptMark="$(apt-mark showmanual)" ; \
+	#
+        # Install utils needed to verify keys
+	apt-get update ; \
+	apt-get install -y --no-install-recommends \
+		ca-certificates p11-kit \
+		gnupg \
+		curl \
+		; \
+	#
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup any apt
+	apt-mark auto '.*' > /dev/null ; \
+	[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null ; \
+	apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \
+	rm -rf /var/lib/apt/lists/* ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11-slim/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre11-slim/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11-slim/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11-slim/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre11-slim/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11-slim/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9-jre11/Dockerfile b/jetty_9-jre11/Dockerfile
index 5e0fefe..f56d4cd 100644
--- a/jetty_9-jre11/Dockerfile
+++ b/jetty_9-jre11/Dockerfile
@@ -1,14 +1,11 @@
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
 FROM openjdk:11-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.4.26.v20200117
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,33 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvf jetty.tar.gz --strip-components=1 \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre11/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre11/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre11/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre11/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8/Dockerfile b/jetty_9-jre8/Dockerfile
similarity index 43%
rename from jetty_jre8/Dockerfile
rename to jetty_9-jre8/Dockerfile
index c356c98..b1b0968 100644
--- a/jetty_jre8/Dockerfile
+++ b/jetty_9-jre8/Dockerfile
@@ -1,14 +1,11 @@
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
 FROM openjdk:8-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.4.26.v20200117
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,34 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvf jetty.tar.gz --strip-components=1 \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_9-jre8/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_9-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_9-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_9-jre8/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_9-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_9-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.2-jre8/Dockerfile b/jetty_9.2-jre8/Dockerfile
index c9620d5..10cfeb4 100644
--- a/jetty_9.2-jre8/Dockerfile
+++ b/jetty_9.2-jre8/Dockerfile
@@ -1,14 +1,10 @@
 FROM openjdk:8-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.2.29.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.2.28.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,38 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
-
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
 	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.2-jre8/docker-entrypoint.sh b/jetty_9.2-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.2-jre8/docker-entrypoint.sh
+++ b/jetty_9.2-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.2-jre8/generate-jetty-start.sh b/jetty_9.2-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.2-jre8/generate-jetty-start.sh
+++ b/jetty_9.2-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_9.3-jre8-alpine/Dockerfile b/jetty_9.3-jre8-alpine/Dockerfile
deleted file mode 100644
index f7f1bfa..0000000
diff --git a/jetty_9.3-jre8/Dockerfile b/jetty_9.3-jre8/Dockerfile
index 5160b66..1ff04d4 100644
--- a/jetty_9.3-jre8/Dockerfile
+++ b/jetty_9.3-jre8/Dockerfile
@@ -1,14 +1,10 @@
 FROM openjdk:8-jre
 
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN groupadd -r jetty && useradd -r -g jetty jetty
-
+ENV JETTY_VERSION 9.3.28.v20191105
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.3.27.v20190418
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -31,36 +27,38 @@ ENV JETTY_GPG_KEYS \
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
 RUN set -xe \
+	&& mkdir /jetty-keys \
+        && export GNUPGHOME=/jetty-keys; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done \
+	&& mkdir -p "$JETTY_HOME" \
+	&& cd $JETTY_HOME \
 	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
 	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
 	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
 	&& tar -xvf jetty.tar.gz --strip-components=1 \
 	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm -fr demo-base javadoc \
-	&& rm jetty.tar.gz* \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
-WORKDIR $JETTY_BASE
-
-# Get the list of modules in the default start.ini and build new base with those modules
-RUN modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
-	&& set -xe \
+	&& rm -fr jetty.tar.gz* \
+	&& mkdir -p "$JETTY_BASE" \
+	&& cd $JETTY_BASE \
+	&& modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \
 	&& java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
 	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
+	&& groupadd -r jetty && useradd -r -g jetty jetty \
+	&& chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" \
+	&& rm -rf /tmp/hsperfdata_root
 
+WORKDIR $JETTY_BASE
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9.3-jre8/docker-entrypoint.sh b/jetty_9.3-jre8/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9.3-jre8/docker-entrypoint.sh
+++ b/jetty_9.3-jre8/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9.3-jre8/generate-jetty-start.sh b/jetty_9.3-jre8/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9.3-jre8/generate-jetty-start.sh
+++ b/jetty_9.3-jre8/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre8-alpine/Dockerfile b/jetty_jdk13/Dockerfile
similarity index 43%
rename from jetty_jre8-alpine/Dockerfile
rename to jetty_jdk13/Dockerfile
index 0693965..a9fc011 100644
--- a/jetty_jre8-alpine/Dockerfile
+++ b/jetty_jdk13/Dockerfile
@@ -1,14 +1,11 @@
-FROM openjdk:8-jre-alpine
-
-# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
-RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow-
+# DO NOT EDIT. Edit Dockerfile-9.4 and use update.sh
+FROM openjdk:13-jdk
 
+ENV JETTY_VERSION 9.4.26.v20200117
 ENV JETTY_HOME /usr/local/jetty
+ENV JETTY_BASE /var/lib/jetty
+ENV TMPDIR /tmp/jetty
 ENV PATH $JETTY_HOME/bin:$PATH
-RUN mkdir -p "$JETTY_HOME"
-WORKDIR $JETTY_HOME
-
-ENV JETTY_VERSION 9.4.18.v20190429
 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/$JETTY_VERSION/jetty-home-$JETTY_VERSION.tar.gz
 
 # GPG Keys are personal keys of Jetty committers (see https://github.com/eclipse/jetty.project/blob/0607c0e66e44b9c12a62b85551da3a0edce0281e/KEYS.txt)
@@ -30,43 +27,55 @@ ENV JETTY_GPG_KEYS \
 	# Greg Wilkins    <gregw@webtide.com>
 	5C9579B3DB2E506429319AAEF33B071B29559E1E
 
-RUN set -xe \
-	# Install required packages for build time. Will be removed when build finishes.
-	&& apk add --no-cache --virtual .build-deps gnupg curl \
-	\
-	&& curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \
-	&& curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \
-	&& export GNUPGHOME="$(mktemp -d)" \
-	&& for key in $JETTY_GPG_KEYS; do \
-		gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \
-	&& gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \
-	&& gpgconf --kill all \
-	&& rm -rf "$GNUPGHOME" \
-	&& tar -xvzf jetty.tar.gz \
-	&& mv jetty-home-$JETTY_VERSION/* ./ \
-	&& sed -i '/jetty-logging/d' etc/jetty.conf \
-	&& rm jetty.tar.gz* \
-	&& rm -fr jetty-home-$JETTY_VERSION/ \
-	\
-	# Remove installed packages and various cleanup
-	&& apk del .build-deps \
-	&& rm -fr .build-deps \
-	&& rm -rf /tmp/hsperfdata_root
+RUN set -xe ; \
+	# fetch GPG keys
+        export GNUPGHOME=/jetty-keys ; \
+	mkdir -p "$GNUPGHOME" ; \
+        for key in $JETTY_GPG_KEYS; do \
+                for server in \
+                        ha.pool.sks-keyservers.net \
+                        p80.pool.sks-keyservers.net:80 \
+                        ipv4.pool.sks-keyservers.net \
+                        pgp.mit.edu ; \
+                do \
+                        if gpg --batch --keyserver "$server" --recv-keys "$key"; then \
+                                break; \
+                        fi; \
+                done; \
+        done ; \
+	#
+	# Fetch jetty release into JETTY_HOME
+	mkdir -p "$JETTY_HOME" ; \
+	cd $JETTY_HOME ; \
+	curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz ; \
+	curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc ; \
+	#
+	# Verify GPG signatures
+	gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz ; \
+	#
+	# Unpack jetty
+	tar -xvf jetty.tar.gz --strip-components=1 ; \
+	sed -i '/jetty-logging/d' etc/jetty.conf ; \
+	#
+	# Create and configure the JETTY_HOME directory
+	mkdir -p "$JETTY_BASE" ; \
+	cd $JETTY_BASE ; \
+	java -jar "$JETTY_HOME/start.jar" --create-startd \
+		--add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" ; \
+	mkdir -p "$TMPDIR" ; \
+	groupadd -r jetty && useradd -r -g jetty jetty ; \
+	chown -R jetty:jetty "$JETTY_HOME" "$JETTY_BASE" "$TMPDIR" ; \
+	#
+	# Cleanup
+	rm -rf /tmp/hsperfdata_root ; \
+	rm -fr $JETTY_HOME/jetty.tar.gz* ; \
+	rm -fr /jetty-keys $GNUPGHOME ; \
+	rm -rf /tmp/hsperfdata_root ; \
+	#
+	# Basic smoke test
+	java -jar "$JETTY_HOME/start.jar" --list-config ;
 
-ENV JETTY_BASE /var/lib/jetty
-RUN mkdir -p "$JETTY_BASE"
 WORKDIR $JETTY_BASE
-
-RUN set -xe \
-	&& java -jar "$JETTY_HOME/start.jar" --create-startd --add-to-start="server,http,deploy,jsp,jstl,ext,resources,websocket" \
-	&& chown -R jetty:jetty "$JETTY_BASE" \
-	&& rm -rf /tmp/hsperfdata_root
-
-ENV TMPDIR /tmp/jetty
-RUN set -xe \
-	&& mkdir -p "$TMPDIR" \
-	&& chown -R jetty:jetty "$TMPDIR"
-
 COPY docker-entrypoint.sh generate-jetty-start.sh /
 
 USER jetty
diff --git a/jetty_9-jre11/docker-entrypoint.sh b/jetty_jdk13/docker-entrypoint.sh
similarity index 92%
copy from jetty_9-jre11/docker-entrypoint.sh
copy to jetty_jdk13/docker-entrypoint.sh
index cd8f821..41ccbe4 100755
--- a/jetty_9-jre11/docker-entrypoint.sh
+++ b/jetty_jdk13/docker-entrypoint.sh
@@ -59,7 +59,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			--version |\
 			-v )\
 			# It is a terminating command, so exec directly
-			exec "$@"
+			JAVA="$1"
+			shift
+			exec $JAVA $JAVA_OPTIONS "$@"
 		esac
 	done
 
@@ -88,7 +90,9 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 		set -- $(cat $JETTY_START)
 	else
 		# Do a jetty dry run to set the final command
-		"$@" --dry-run > $JETTY_START
+		JAVA="$1"
+		shift
+		$JAVA $JAVA_OPTIONS "$@" --dry-run > $JETTY_START
 		if [ $(egrep -v '\\$' $JETTY_START | wc -l ) -gt 1 ] ; then
 			# command was more than a dry-run
 			cat $JETTY_START \
@@ -96,14 +100,14 @@ if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then
 			| egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration '
 			exit
 		fi
-		set -- $(sed 's/\\$//' $JETTY_START)
+		set -- $(sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' $JETTY_START)
 	fi
 fi
 
 if [ "${1##*/}" = java -a -n "$JAVA_OPTIONS" ] ; then
-	java="$1"
+	JAVA="$1"
 	shift
-	set -- "$java" $JAVA_OPTIONS "$@"
+	set -- "$JAVA" $JAVA_OPTIONS "$@"
 fi
 
 exec "$@"
diff --git a/jetty_9-jre11/generate-jetty-start.sh b/jetty_jdk13/generate-jetty-start.sh
similarity index 50%
copy from jetty_9-jre11/generate-jetty-start.sh
copy to jetty_jdk13/generate-jetty-start.sh
index de78102..5895278 100755
--- a/jetty_9-jre11/generate-jetty-start.sh
+++ b/jetty_jdk13/generate-jetty-start.sh
@@ -4,4 +4,4 @@ if [ -z "$JETTY_START" ] ; then
 	JETTY_START=$JETTY_BASE/jetty.start
 fi
 rm -f $JETTY_START
-/docker-entrypoint.sh --dry-run | sed 's/\\$//' > $JETTY_START
+/docker-entrypoint.sh --dry-run | sed -e 's/ -Djava.io.tmpdir=[^ ]*//g' -e 's/\\$//' > $JETTY_START
diff --git a/jetty_jre7/Dockerfile b/jetty_jre7/Dockerfile
deleted file mode 100644
index 20bad62..0000000
diff --git a/jetty_jre7/docker-entrypoint.sh b/jetty_jre7/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre7/generate-jetty-start.sh b/jetty_jre7/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8-alpine/docker-entrypoint.sh b/jetty_jre8-alpine/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8-alpine/generate-jetty-start.sh b/jetty_jre8-alpine/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000
diff --git a/jetty_jre8/docker-entrypoint.sh b/jetty_jre8/docker-entrypoint.sh
deleted file mode 100755
index cd8f821..0000000
diff --git a/jetty_jre8/generate-jetty-start.sh b/jetty_jre8/generate-jetty-start.sh
deleted file mode 100755
index de78102..0000000

@yosifkit
Copy link
Member

Build test of #7134; 7dc72f7; amd64 (jetty):

$ bashbrew build jetty:9.4.26-jre11-slim
Building bashbrew/cache:0375d673baebe2ba0f98f45b7e27cc3cd9bde2a1bda1013943cf4a75cc80aaa0 (jetty:9.4.26-jre11-slim)
Tagging jetty:9.4.26-jre11-slim
Tagging jetty:9.4-jre11-slim
Tagging jetty:9-jre11-slim

$ test/run.sh jetty:9.4.26-jre11-slim
testing jetty:9.4.26-jre11-slim
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed


$ bashbrew build jetty:9.4.26-jre11
Building bashbrew/cache:58aaca3c7cfc85f7cfa244ba87ffff39b94f764cfe3601bf6d7468d98bacfe23 (jetty:9.4.26-jre11)
Tagging jetty:9.4.26-jre11
Tagging jetty:9.4-jre11
Tagging jetty:9-jre11

$ test/run.sh jetty:9.4.26-jre11
testing jetty:9.4.26-jre11
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed


$ bashbrew build jetty:9.4.26-jre8
Building bashbrew/cache:09b42c4214ee6f9f4218d2da25d447258d1d14cf3db379141a80d5e8f1b5686e (jetty:9.4.26-jre8)
Tagging jetty:9.4.26-jre8
Tagging jetty:9.4-jre8
Tagging jetty:9-jre8

$ test/run.sh jetty:9.4.26-jre8
testing jetty:9.4.26-jre8
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed


$ bashbrew build jetty:9.4.26-jdk13-slim
Building bashbrew/cache:4b765752d6b0e9201a43b95f024fa32b1c573afe0eff8c5c9ca40b971e85c163 (jetty:9.4.26-jdk13-slim)
Tagging jetty:9.4.26-jdk13-slim
Tagging jetty:9.4-jdk13-slim
Tagging jetty:9-jdk13-slim

$ test/run.sh jetty:9.4.26-jdk13-slim
testing jetty:9.4.26-jdk13-slim
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed


$ bashbrew build jetty:9.4.26
Building bashbrew/cache:e23dc6951c511e70473ddc0588990adb7e230f85006e156a64090bc18e16aad6 (jetty:9.4.26)
Tagging jetty:9.4.26
Tagging jetty:9.4
Tagging jetty:9
Tagging jetty:9.4.26-jdk13
Tagging jetty:9.4-jdk13
Tagging jetty:9-jdk13
Tagging jetty:latest
Tagging jetty:jdk13

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


$ bashbrew build jetty:9.3.28-jre8
Building bashbrew/cache:4575d359ab3b06991f60adc3e45d92604dafabb61d032d105fefe6e125f1f435 (jetty:9.3.28-jre8)
Tagging jetty:9.3.28-jre8
Tagging jetty:9.3-jre8

$ test/run.sh jetty:9.3.28-jre8
testing jetty:9.3.28-jre8
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed


$ bashbrew build jetty:9.2.29-jre8
Building bashbrew/cache:7109b7349f6fdfd1d244e2d66e5056e90a29d5f13ed1bf046f3ba92fdf157617 (jetty:9.2.29-jre8)
Tagging jetty:9.2.29-jre8
Tagging jetty:9.2-jre8

$ test/run.sh jetty:9.2.29-jre8
testing jetty:9.2.29-jre8
	'utc' [1/5]...passed
	'cve-2014--shellshock' [2/5]...passed
	'no-hard-coded-passwords' [3/5]...passed
	'override-cmd' [4/5]...passed
	'jetty-hello-web' [5/5]....passed

@yosifkit yosifkit merged commit bb37a3b into docker-library:master Jan 22, 2020
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.

5 participants