diff --git a/roles/debian_server/files/docker-restart b/roles/debian_server/files/docker-restart
new file mode 100755
index 0000000000000000000000000000000000000000..83542fb05f4364adbe6078abdf5ceeb12953d9c9
--- /dev/null
+++ b/roles/debian_server/files/docker-restart
@@ -0,0 +1,7 @@
+#!/bin/sh
+set -eu
+
+docker container list \
+    --filter 'label=com.docker.compose.project' \
+    --filter 'status=exited' \
+    --format '{{ .ID }}' |  xargs -tr docker start
diff --git a/roles/debian_server/handlers/main.yml b/roles/debian_server/handlers/main.yml
index 84d97303727eeeb487fbf534357965b3df5a618b..a643629675a261b953caa71baace287364721587 100644
--- a/roles/debian_server/handlers/main.yml
+++ b/roles/debian_server/handlers/main.yml
@@ -1,4 +1,8 @@
 ---
+- name: Systemd daemon reload
+  ansible.builtin.systemd:
+    daemon_reload: true
+
 - name: Rebuild initramfs
   command:
     cmd: update-initramfs -u
diff --git a/roles/debian_server/tasks/main.yml b/roles/debian_server/tasks/main.yml
index 7be98e50511913ef2f8cc83076e39af6e962164f..df12fdafd9407d9acf3de1ada66ef9769bffffe2 100644
--- a/roles/debian_server/tasks/main.yml
+++ b/roles/debian_server/tasks/main.yml
@@ -55,6 +55,28 @@
       - ufw
     state: present
 
+- name: Copy the script to start stopped container after a restart
+  copy:
+    dest: /usr/share/docker.io/restart-containers
+    mode: preserve
+    src: docker-restart
+
+- name: Create a drop-in directory for the Docker service
+  file:
+    path: /etc/systemd/system/docker.service.d
+    mode: 0o0755
+    state: directory
+
+- name: Restart stopped containers after a restart
+  copy:
+    content: |
+      [Service]
+      ExecStartPost=/usr/share/docker.io/restart-containers
+    dest: /etc/systemd/system/docker.service.d/restart-containers.conf
+    mode: 0o0644
+  notify:
+    - Systemd daemon reload
+
 - name: Rate limit SSH
   community.general.ufw:
     rule: limit