diff --git a/Dockerfile b/Dockerfile
index 7bc7d31c231b819948aa5dc84ae7517c19aec0d9..30efeef624e34c433faac4aed1f175a6005a5bea 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,21 @@
-FROM debian:stable-slim
+FROM debian:stable-slim AS exporter_build
 
-COPY build.sh /tmp/build.sh
+WORKDIR /tmp
+RUN apt-get -q update && \
+    env DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl ca-certificates
 
-RUN /tmp/build.sh && rm /tmp/build.sh
+RUN MEMCACHED_EXPORTER_VERSION=0.10.0 && \
+    curl -vsfL https://github.com/prometheus/memcached_exporter/releases/download/v${MEMCACHED_EXPORTER_VERSION}/memcached_exporter-${MEMCACHED_EXPORTER_VERSION}.linux-amd64.tar.gz | tar xzf - && \
+    cp memcached_exporter-${MEMCACHED_EXPORTER_VERSION}.linux-amd64/memcached_exporter /usr/bin/memcached_exporter && \
+    rm -fr memcached_exporter*
 
-ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/memcached -m ${MEM:-64} -c ${MAXCONN:-16384} -p ${PORT:-11211} ${ENABLE_SASL:+-S}"]
+FROM registry.git.autistici.org/ai3/docker/s6-base:master
+
+RUN apt-get -q update && \
+    env DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl memcached && \
+    apt-get clean && \
+    rm -fr /var/lib/apt/lists/*
+
+COPY --from=exporter_build /usr/bin/memcached_exporter /usr/bin/memcached_exporter
+COPY services.d/ /etc/services.d/
 
diff --git a/README.md b/README.md
index cbcda831d93a4a672ad5ed6477395b40aef6c682..e882982546a8ab773405d1d63d4d39ce7bd8a846 100644
--- a/README.md
+++ b/README.md
@@ -10,3 +10,6 @@ The server can be configured with environment variables:
 (a valid */etc/sasldb2* should be mounted into the container for it
 to work).
 
+The container will run a Prometheus exporter on PORT + 1, this can
+be overridden with the `EXPORTER_PORT` environment variable.
+
diff --git a/build.sh b/build.sh
deleted file mode 100755
index 71be2190a12991e928190fbcfd92660e092f8c1c..0000000000000000000000000000000000000000
--- a/build.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-#
-# Install script for memcached inside a Docker container.
-#
-
-# The default bitnami/minideb image defines an 'install_packages'
-# command which is just a convenient helper. Define our own in
-# case we are using some other Debian image.
-if [ "x$(which install_packages)" = "x" ]; then
-    install_packages() {
-        env DEBIAN_FRONTEND=noninteractive apt-get install -qy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --no-install-recommends "$@"
-    }
-fi
-
-die() {
-    echo "ERROR: $*" >&2
-    exit 1
-}
-
-set -x
-
-apt -q update
-
-# Install memcached.
-install_packages memcached \
-    || die "could not install packages"
-
-# Clean up.
-apt-get autoremove -y
-apt-get clean
-rm -fr /var/lib/apt/lists/*
diff --git a/services.d/exporter/run b/services.d/exporter/run
new file mode 100755
index 0000000000000000000000000000000000000000..780a9ca5f9ccf13c106d0d7be29a65d05468a8af
--- /dev/null
+++ b/services.d/exporter/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+default_exporter_port=$(expr ${PORT:-11211} + 1)
+exec /usr/bin/memcached_exporter --memcached.address=127.0.0.1:${PORT:-11211} --web.listen-address=:${EXPORTER_PORT:-${default_exporter_port}}
+
diff --git a/services.d/memcache/finish b/services.d/memcache/finish
new file mode 100755
index 0000000000000000000000000000000000000000..b6531b3ca574205c9e78650dbd7c38718683e57c
--- /dev/null
+++ b/services.d/memcache/finish
@@ -0,0 +1,3 @@
+#!/usr/bin/execlineb -S0
+
+s6-svscanctl -t /var/run/s6/services
diff --git a/services.d/memcache/run b/services.d/memcache/run
new file mode 100755
index 0000000000000000000000000000000000000000..8c7aa7f6a1472746567bf888e64d419843b63ea1
--- /dev/null
+++ b/services.d/memcache/run
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+exec /usr/bin/memcached -m ${MEM:-64} -c ${MAXCONN:-16384} -p ${PORT:-11211} ${ENABLE_SASL:+-S}
+