diff --git a/ansible/roles/haproxy/defaults/main.yml b/ansible/roles/haproxy/defaults/main.yml
index 24cab906ccec3c7c1b14849132a53f1809a99f28..ca5a3be975b1b1f6be206b1aacfe2317f6539c50 100644
--- a/ansible/roles/haproxy/defaults/main.yml
+++ b/ansible/roles/haproxy/defaults/main.yml
@@ -10,6 +10,7 @@ haproxy_services:
     privileged: True
     volumes: "{{ haproxy_default_volumes + haproxy_extra_volumes }}"
     dimensions: "{{ haproxy_dimensions }}"
+    healthcheck: "{{ haproxy_healthcheck }}"
   keepalived:
     container_name: keepalived
     group: haproxy
@@ -49,6 +50,19 @@ haproxy_defaults_max_connections: 10000
 haproxy_dimensions: "{{ default_container_dimensions }}"
 keepalived_dimensions: "{{ default_container_dimensions }}"
 
+haproxy_enable_healthchecks: "{{ enable_container_healthchecks }}"
+haproxy_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
+haproxy_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
+haproxy_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
+haproxy_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address |  put_address_in_context('url') }}:{{ haproxy_monitor_port }}"]
+haproxy_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
+haproxy_healthcheck:
+  interval: "{{ haproxy_healthcheck_interval }}"
+  retries: "{{ haproxy_healthcheck_retries }}"
+  start_period: "{{ haproxy_healthcheck_start_period }}"
+  test: "{% if haproxy_enable_healthchecks | bool %}{{ haproxy_healthcheck_test }}{% else %}NONE{% endif %}"
+  timeout: "{{ haproxy_healthcheck_timeout }}"
+
 haproxy_default_volumes:
   - "{{ node_config_directory }}/haproxy/:{{ container_config_directory }}/:ro"
   - "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/haproxy/handlers/main.yml b/ansible/roles/haproxy/handlers/main.yml
index 5e480ad2c6255100b2f5569fc79d9a975fc62bfa..fecff0ddc982edeb5f15d0cf2e53aa12efc5aa5e 100644
--- a/ansible/roles/haproxy/handlers/main.yml
+++ b/ansible/roles/haproxy/handlers/main.yml
@@ -59,6 +59,7 @@
     privileged: "{{ service.privileged | default(False) }}"
     volumes: "{{ service.volumes }}"
     dimensions: "{{ service.dimensions }}"
+    healthcheck: "{{ service.healthcheck | default(omit) }}"
   when:
     - kolla_action != "config"
     - groups.kolla_ha_is_master_False is defined
@@ -137,6 +138,7 @@
     privileged: "{{ service.privileged | default(False) }}"
     volumes: "{{ service.volumes }}"
     dimensions: "{{ service.dimensions }}"
+    healthcheck: "{{ service.healthcheck | default(omit) }}"
   when:
     - kolla_action != "config"
     - groups.kolla_ha_is_master_True is defined
diff --git a/ansible/roles/haproxy/tasks/check-containers.yml b/ansible/roles/haproxy/tasks/check-containers.yml
index f572177e9170fa1c7a04e70029f29a0984bf28ed..bb19a0c8043d7c9b3864b151623e073eb9762d46 100644
--- a/ansible/roles/haproxy/tasks/check-containers.yml
+++ b/ansible/roles/haproxy/tasks/check-containers.yml
@@ -8,6 +8,7 @@
     image: "{{ item.value.image }}"
     volumes: "{{ item.value.volumes }}"
     dimensions: "{{ item.value.dimensions }}"
+    healthcheck: "{{ item.value.healthcheck | default(omit) }}"
     privileged: "{{ item.value.privileged | default(False) }}"
   when:
     - inventory_hostname in groups[item.value.group]
diff --git a/releasenotes/notes/implement-docker-healthchecks-for-haproxy-e222d45809a1a9a1.yaml b/releasenotes/notes/implement-docker-healthchecks-for-haproxy-e222d45809a1a9a1.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9607fffcd42b41d033631eeb25a06f31b631906e
--- /dev/null
+++ b/releasenotes/notes/implement-docker-healthchecks-for-haproxy-e222d45809a1a9a1.yaml
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Implements container healthchecks for haproxy services.
+    See `blueprint
+    <https://blueprints.launchpad.net/kolla-ansible/+spec/container-health-check>`__