diff --git a/ansible/roles/docker/defaults/main.yml b/ansible/roles/docker/defaults/main.yml
index 3d2e50934..5f0c82771 100644
--- a/ansible/roles/docker/defaults/main.yml
+++ b/ansible/roles/docker/defaults/main.yml
@@ -31,6 +31,9 @@ docker_registry:
 # CA of docker registry
 docker_registry_ca:
 
+# List of Docker registry mirrors.
+docker_registry_mirrors: []
+
 # MTU to pass through to containers not using net=host
 docker_daemon_mtu: 1500
 
diff --git a/ansible/roles/docker/templates/daemon.json.j2 b/ansible/roles/docker/templates/daemon.json.j2
index c7afa0632..c910cef86 100644
--- a/ansible/roles/docker/templates/daemon.json.j2
+++ b/ansible/roles/docker/templates/daemon.json.j2
@@ -1,4 +1,11 @@
 {
+{%- if docker_registry_mirrors | length > 0 %}
+  "registry-mirrors": [
+{%- for mirror in docker_registry_mirrors %}
+      "{{ mirror }}"{%- if not loop.last -%},{%- endif %}
+{%- endfor %}
+  ],
+{%- endif %}
   "storage-driver": "{% if docker_storage_driver == 'devicemapper' %}devicemapper{% else %}overlay{% endif %}",
 {% if docker_daemon_mtu %}
   "mtu": {{ docker_daemon_mtu }},
diff --git a/playbooks/kayobe-overcloud-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-base/overrides.yml.j2
index 0f80b73ad..2d5755227 100644
--- a/playbooks/kayobe-overcloud-base/overrides.yml.j2
+++ b/playbooks/kayobe-overcloud-base/overrides.yml.j2
@@ -3,6 +3,10 @@
 # Ansible is run directly on the controller.
 disable_selinux_do_reboot: false
 
+# Use the OpenStack infra's Dockerhub mirror.
+docker_registry_mirrors:
+  - "http://{{ zuul_site_mirror_fqdn }}:8081/registry-1.docker/"
+
 kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['git.openstack.org/openstack/kolla'].src_dir }}"
 kolla_source_version: "{{ zuul.projects['git.openstack.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['git.openstack.org/openstack/kolla-ansible'].src_dir }}"
diff --git a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
index 383e97cd5..7511dc16d 100644
--- a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
+++ b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
@@ -3,6 +3,10 @@
 # Ansible is run directly on the controller.
 disable_selinux_do_reboot: false
 
+# Use the OpenStack infra's Dockerhub mirror.
+docker_registry_mirrors:
+  - "http://{{ zuul_site_mirror_fqdn }}:8081/registry-1.docker/"
+
 {% if not previous_release | default(false) %}
 kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['git.openstack.org/openstack/kolla'].src_dir }}"
 kolla_source_version: "{{ zuul.projects['git.openstack.org/openstack/kolla'].checkout }}"
diff --git a/playbooks/kayobe-seed-base/overrides.yml.j2 b/playbooks/kayobe-seed-base/overrides.yml.j2
index 34ad2462f..4212a73fc 100644
--- a/playbooks/kayobe-seed-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-base/overrides.yml.j2
@@ -3,6 +3,10 @@
 # Ansible is run directly on the controller.
 disable_selinux_do_reboot: false
 
+# Use the OpenStack infra's Dockerhub mirror.
+docker_registry_mirrors:
+  - "http://{{ zuul_site_mirror_fqdn }}:8081/registry-1.docker/"
+
 kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['git.openstack.org/openstack/kolla'].src_dir }}"
 kolla_source_version: "{{ zuul.projects['git.openstack.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['git.openstack.org/openstack/kolla-ansible'].src_dir }}"