diff --git a/Dockerfile b/Dockerfile
index c4db84356283f34e408586742d268e0af9dd786e..9f3418c884e3609973f60ede1985c88f9b7a367d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,7 +25,8 @@ FROM alpine:3.13.1 AS gomplate
 ARG TARGETOS
 ARG TARGETARCH
 ARG TARGETVARIANT
-ARG GOMPLATE_VERSION=v3.9.0
+
+ENV GOMPLATE_VERSION=v3.9.0
 
 RUN wget -O /usr/local/bin/gomplate \
   "https://github.com/hairyhenderson/gomplate/releases/download/${GOMPLATE_VERSION}/gomplate_${TARGETOS:-linux}-${TARGETARCH:-amd64}${TARGETVARIANT}" \
@@ -45,7 +46,7 @@ RUN mkdir -p /var/dex
 RUN chown -R 1001:1001 /var/dex
 
 RUN mkdir -p /etc/dex
-COPY config.docker.yaml /etc/dex/config.docker.yaml
+COPY config.docker.yaml /etc/dex/
 RUN chown -R 1001:1001 /etc/dex
 
 # Copy module files for CVE scanning / dependency analysis.
@@ -63,7 +64,7 @@ COPY --from=builder /usr/local/src/dex/web /web
 
 USER 1001:1001
 
-COPY docker-entrypoint.sh /
+COPY docker-entrypoint.sh /entrypoint.sh
 
-ENTRYPOINT ["/docker-entrypoint.sh"]
-CMD ["serve", "/etc/dex/config.docker.yaml"]
+ENTRYPOINT ["/entrypoint.sh"]
+CMD ["dex", "serve", "/etc/dex/config.docker.yaml"]
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index def2baa43e26da97b3a94098d98685525d6de8b9..bb12d313b38dc04e026aad79c751c9aab1b7cfb1 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -1,31 +1,32 @@
 #!/bin/sh -e
 
 ### Usage: /docker-entrypoint.sh <command> <args>
-### * If command equals to "serve", config file for serving will be preprocessed using gomplate and saved to tmp dir.
-###   Example: docker-entrypoint.sh serve config.yaml = dex serve /tmp/dex-config.yaml-ABCDEFG
-### * If command is not in the list of known dex commands, it will be executed bypassing entrypoint.
-###   Example: docker-entrypoint.sh echo "Hello!" = echo "Hello!"
+function main() {
+  executable=$1
+  command=$2
 
-command=$1
-
-case "$command" in
-  serve)
-    for file_candidate in $@ ; do
-      if test -f "$file_candidate"; then
-        tmpfile=$(mktemp /tmp/dex.config.yaml-XXXXXX)
-        gomplate -f "$file_candidate" -o "$tmpfile"
+  if [[ "$executable" != "dex" ]] && [[ "$executable" != "$(which dex)" ]]; then
+    exec $@
+  fi
 
-        args="${args} ${tmpfile}"
-      else
-        args="${args} ${file_candidate}"
-      fi
-    done
-    exec dex $args
-    ;;
-  --help|-h|version)
-    exec dex $@
-    ;;
-  *)
+  if [[ "$command" != "serve" ]]; then
     exec $@
-    ;;
-esac
+  fi
+
+  for tpl_candidate in $@ ; do
+    case "$tpl_candidate" in
+      *.tpl|*.tmpl|*.yaml)
+        tmp_file=$(mktemp /tmp/dex.config.yaml-XXXXXX)
+        gomplate -f "$tpl_candidate" -o "$tmp_file"
+
+        args="${args} ${tmp_file}"
+        ;;
+      *)
+        args="${args} ${tpl_candidate}"
+        ;;
+    esac
+  done
+  exec $args
+}
+
+main $@