From e5922692f6bfe3edf5b54780d5bdf596e99adb40 Mon Sep 17 00:00:00 2001 From: Ruakij Date: Tue, 3 Nov 2026 16:20:11 +0100 Subject: [PATCH] docker: enable live-restore by merging daemon options into daemon.json --- docker/defaults/main.yml | 6 ++++++ docker/handlers/main.yml | 6 ++++++ docker/tasks/main.yml | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 docker/defaults/main.yml diff --git a/docker/defaults/main.yml b/docker/defaults/main.yml new file mode 100644 index 0000000..b8112c8 --- /dev/null +++ b/docker/defaults/main.yml @@ -0,0 +1,6 @@ +--- +docker: + # Merged into /etc/docker/daemon.json; keys not listed here keep their host value. + daemon: + # Containers keep running while dockerd restarts or upgrades. + live-restore: true diff --git a/docker/handlers/main.yml b/docker/handlers/main.yml index 271f0b0..f4ce7b6 100644 --- a/docker/handlers/main.yml +++ b/docker/handlers/main.yml @@ -2,3 +2,9 @@ service: name: "docker" state: restarted + +# SIGHUP applies the reloadable daemon.json options without stopping containers. +- name: reload_docker + service: + name: "docker" + state: reloaded diff --git a/docker/tasks/main.yml b/docker/tasks/main.yml index 7d3fe18..925e336 100644 --- a/docker/tasks/main.yml +++ b/docker/tasks/main.yml @@ -59,6 +59,29 @@ - pass state: latest +- name: Read daemon.json + ansible.builtin.slurp: + path: /etc/docker/daemon.json + register: docker_daemon_json + failed_when: false + tags: docker_daemon + +- name: Merge daemon options into daemon.json + vars: + docker_daemon_current: "{{ (docker_daemon_json.content | b64decode | from_json) if docker_daemon_json.content is defined else {} }}" + docker_daemon_merged: "{{ docker_daemon_current | combine(docker.daemon) }}" + ansible.builtin.copy: + content: "{{ docker_daemon_merged | to_nice_json(indent=4, sort_keys=False) }}\n" + dest: /etc/docker/daemon.json + owner: root + group: root + mode: "0644" + validate: dockerd --validate --config-file=%s + # Rewritten only on a value change, so hand-written formatting survives otherwise. + when: docker_daemon_merged != docker_daemon_current + notify: reload_docker + tags: docker_daemon + - name: Deploy docker-compose command to new docker compose plugin ansible.builtin.copy: src: docker-compose