diff --git a/mainline/alpine-perl/Dockerfile b/mainline/alpine-perl/Dockerfile
index d14ebc4b2759e8dc62db18fc9b5bd9c722dd2a1a..3fef8fbee3314bdf4db3a8afd89d5b7a735a1fae 100644
--- a/mainline/alpine-perl/Dockerfile
+++ b/mainline/alpine-perl/Dockerfile
@@ -107,7 +107,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/mainline/alpine-perl/docker-entrypoint.sh b/mainline/alpine-perl/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/mainline/alpine-perl/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/mainline/alpine/Dockerfile b/mainline/alpine/Dockerfile
index 6b8391862916b83c57dc255def956c8b23aac01f..619fc4e9013fae0075aba69e5b86425009f0b09f 100644
--- a/mainline/alpine/Dockerfile
+++ b/mainline/alpine/Dockerfile
@@ -106,7 +106,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/mainline/alpine/docker-entrypoint.sh b/mainline/alpine/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/mainline/alpine/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/mainline/buster-perl/Dockerfile b/mainline/buster-perl/Dockerfile
index 294f86ecf08b6af56f5539507cd54d0fd97a5e13..26ac40ddb968ea716208dd668b08af5ffe32b8c5 100644
--- a/mainline/buster-perl/Dockerfile
+++ b/mainline/buster-perl/Dockerfile
@@ -98,7 +98,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/mainline/buster-perl/docker-entrypoint.sh b/mainline/buster-perl/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/mainline/buster-perl/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/mainline/buster/Dockerfile b/mainline/buster/Dockerfile
index 7042171619bcf7ccc553dcf083e53c13be1833e0..392e05265090e0977dd473abb6a1027c35749972 100644
--- a/mainline/buster/Dockerfile
+++ b/mainline/buster/Dockerfile
@@ -97,7 +97,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/mainline/buster/docker-entrypoint.sh b/mainline/buster/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/mainline/buster/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/stable/alpine-perl/Dockerfile b/stable/alpine-perl/Dockerfile
index 8aa45d0c3f05436cd36c4b16696eb601532caa51..d470dadab0c7987826a99613305a91edb58fcbb6 100644
--- a/stable/alpine-perl/Dockerfile
+++ b/stable/alpine-perl/Dockerfile
@@ -107,7 +107,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/stable/alpine-perl/docker-entrypoint.sh b/stable/alpine-perl/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/stable/alpine-perl/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/stable/alpine/Dockerfile b/stable/alpine/Dockerfile
index fedb169cda20ae278aa3e7d6cb151042a908ea49..32c6746d5333a51370a217e8c5233bdec9426336 100644
--- a/stable/alpine/Dockerfile
+++ b/stable/alpine/Dockerfile
@@ -106,7 +106,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/stable/alpine/docker-entrypoint.sh b/stable/alpine/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/stable/alpine/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/stable/buster-perl/Dockerfile b/stable/buster-perl/Dockerfile
index 2cc01e50679b8ee63ac9a09c2fb5dac1ed7b5f86..59bcfb0f12b5a6964d0306e180634f3077666d21 100644
--- a/stable/buster-perl/Dockerfile
+++ b/stable/buster-perl/Dockerfile
@@ -98,7 +98,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/stable/buster-perl/docker-entrypoint.sh b/stable/buster-perl/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/stable/buster-perl/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"
diff --git a/stable/buster/Dockerfile b/stable/buster/Dockerfile
index cce6f7d053a9c681aa081403cac1cb57c67b44ce..3b90679517fa368a5a0ae78c17ff60a084dacb02 100644
--- a/stable/buster/Dockerfile
+++ b/stable/buster/Dockerfile
@@ -97,7 +97,12 @@ RUN set -x \
     && ln -sf /dev/stderr /var/log/nginx/error.log \
 # make default server listen on ipv6
     && sed -i -E 's,listen       80;,listen       80;\n    listen  [::]:80;,' \
-        /etc/nginx/conf.d/default.conf
+        /etc/nginx/conf.d/default.conf \
+# create a docker-entrypoint.d directory
+    && mkdir /docker-entrypoint.d
+
+COPY docker-entrypoint.sh /
+ENTRYPOINT ["/docker-entrypoint.sh"]
 
 EXPOSE 80
 
diff --git a/stable/buster/docker-entrypoint.sh b/stable/buster/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3836402be729aeb8e59fe23fa1b268380b72f38a
--- /dev/null
+++ b/stable/buster/docker-entrypoint.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+# vim:sw=4:ts=4:et
+
+set -e
+
+if [ "$1" = "nginx" ]; then
+    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
+        echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform an initial configuration"
+
+        echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -executable | sort -n); do
+            echo "$0: Launching $f";
+            "$f"
+        done
+
+        # warn on shell scripts without exec bit
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh" -not -executable); do
+            echo "$0: Ignoring $f, not executable";
+        done
+        # warn on filetypes we don't know what to do with
+        for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh"); do
+            echo "$0: Ignoring $f";
+        done
+
+        echo "$0: Initial configuration complete; ready for start up"
+    else
+        echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration"
+    fi
+fi
+
+exec "$@"