diff --git a/roles/docker-install/tasks/main.yaml b/roles/docker-install/tasks/main.yaml
index 00963b9df..0090e1dc7 100644
--- a/roles/docker-install/tasks/main.yaml
+++ b/roles/docker-install/tasks/main.yaml
@@ -38,30 +38,82 @@
   ignore_errors: true
 
 - block:
-    - name: Create docker directory
+    - name: Create docker service directory
       file:
         path: /etc/systemd/system/docker.service.d/
         state: directory
         mode: '0755'
 
-    - name: Configure proxy for docker if enabled
+    - name: Configure proxy for docker service if enabled
       template:
         src: http-proxy-conf.j2
         dest: /etc/systemd/system/docker.service.d/http-proxy.conf
   when: proxy.enabled|bool == true
   become: yes
 
-- name: Create docker directory
+- name: Create docker config directory
   file:
     path: "{{ docker_config_path }}"
     state: directory
     mode: '0755'
   become: yes
 
-- name: Save docker daemon configuration
+- name: Debug zuul site mirror var
+  debug:
+    msg:
+      - "zuul_site_mirror_fqdn: {{ zuul_site_mirror_fqdn | default('NONE') }}"
+  ignore_errors: yes
+
+- name: Set docker_config variable
+  set_fact:
+    docker_config_file: "{{ docker_config_path }}/daemon.json"
+
+- name: Check if docker config file exists
+  stat:
+    path: "{{ docker_config_file }}"
+  register: res
+
+# Avoid long if/then/else blocks here below, pretend that config exists
+- name: Create empty docker config if it doesn't exist
   copy:
-    content: "{{ docker_config | to_nice_json }}"
-    dest: "{{ docker_config_path }}/daemon.json"
+    content: "{}"
+    dest: "{{ docker_config_file }}"
+  when: not res.stat.exists
+  become: yes
+
+- name: Get current docker configuration
+  command: "cat {{ docker_config_file }}"
+  register: res
+
+- name: Get current docker configuration as json
+  set_fact:
+    default_docker_conf: "{{ res.stdout | from_json }}"
+
+- name: Debug current docker configuration
+  debug:
+    var: default_docker_conf
+
+- name: Merge default and custom configuration
+  set_fact:
+    merged_docker_config: "{{ default_docker_conf | combine(docker_config) }}"
+
+- name: Debug merged docker configuration
+  debug:
+    var: merged_docker_config
+
+- name: Add container images mirror configuration
+  set_fact:
+    merged_docker_config: "{{ merged_docker_config | combine({ 'registry-mirrors': [ 'http://' + zuul_site_mirror_fqdn + ':8082' ] })}}"
+  when: zuul_site_mirror_fqdn is defined
+
+- name: Debug merged docker configuration
+  debug:
+    var: merged_docker_config
+
+- name: Save merged docker daemon configuration
+  copy:
+    content: "{{ merged_docker_config | to_nice_json }}"
+    dest: "{{ docker_config_file }}"
   become: yes
 
 - name: Start docker
@@ -72,9 +124,8 @@
     daemon_reload: yes
     enabled: true
 
-- name: Change group ownership on docker sock
+- name: Change group ownership on docker socket
   become: yes
   file:
     path: /var/run/docker.sock
     group: docker
-