diff --git a/unit-files/discovery@.service b/unit-files/discovery@.service
new file mode 100644
index 0000000000000000000000000000000000000000..573dbf1117c3eeb80c667ad92806bc2cb951a877
--- /dev/null
+++ b/unit-files/discovery@.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=%p for %i etcd registration
+
+# Requirements
+Requires=etcd.service
+
+# Dependency binding
+BindsTo=web@%i.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/bin/bash -euxc ' \
+  ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' %i`; \
+  etcdctl --peers 172.17.42.1:4001 set /services/web/%i \'{"ip":"\'$ip\'", "port":"80"}\';'
+ExecStop=-/usr/bin/etcdctl rm /services/web/%i
+
diff --git a/unit-files/web@.service b/unit-files/web@.service
index 5caaba4fddb731c46641631fa9466fa0e2c8e335..2c2daa7a2233ba751e3d2814aaf4fe4ee83d8bdd 100644
--- a/unit-files/web@.service
+++ b/unit-files/web@.service
@@ -3,10 +3,12 @@ Description=%p-%i
 
 # Requirements
 Requires=docker.service
+Requires=discovery@%i.service
 Requires=backup@%i.timer
 
 # Dependency ordering
 After=docker.service
+Before=discovery@%i.service
 Before=backup@%i.timer
 
 [Service]
@@ -29,9 +31,6 @@ ExecStart=/bin/bash -euxc ' \
     -v /data/runtime/domains/%i/log/apache2:/var/log/apache2 \
     ${DOCKER_ARGUMENTS} \
     pierreozoux/${APPLICATION}'
-ExecStartPost=/bin/bash -c ' \
-  ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' %i`; \
-  /usr/bin/etcdctl --peers 172.17.42.1:4001 set /services/web/%i \'{"ip":"\'$ip\'", "port":"80"}\'
+ExecReload=/usr/bin/docker restart %i
 ExecStop=/usr/bin/docker stop %i
-ExecStopPost=-/usr/bin/etcdctl --peers 172.17.42.1:4001 rm /services/web/%i