diff --git a/docker/congress/congress-api/Dockerfile.j2 b/docker/congress/congress-api/Dockerfile.j2
new file mode 100644
index 0000000000000000000000000000000000000000..b23548746ecd398904c48708e167cdeca4b94e84
--- /dev/null
+++ b/docker/congress/congress-api/Dockerfile.j2
@@ -0,0 +1,11 @@
+FROM {{ namespace }}/{{ image_prefix }}congress-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+COPY extend_start.sh /usr/local/bin/kolla_congress_extend_start
+RUN chmod 755 /usr/local/bin/kolla_congress_extend_start
+
+{% block congress_api_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+{{ include_footer }}
+
+USER congress
diff --git a/docker/congress/congress-api/extend_start.sh b/docker/congress/congress-api/extend_start.sh
new file mode 100644
index 0000000000000000000000000000000000000000..b18446d7f4ad4e48172a380e5c5b8cfce4a4aa9e
--- /dev/null
+++ b/docker/congress/congress-api/extend_start.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
+# of the KOLLA_BOOTSTRAP variable being set, including empty.
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
+    congress-db-manage --config-file /etc/congress/congress.conf upgrade head
+    exit 0
+fi
diff --git a/docker/congress/congress-base/Dockerfile.j2 b/docker/congress/congress-base/Dockerfile.j2
new file mode 100644
index 0000000000000000000000000000000000000000..2a69643872475878a6cd0ca59075f36e526a92e7
--- /dev/null
+++ b/docker/congress/congress-base/Dockerfile.j2
@@ -0,0 +1,43 @@
+FROM {{ namespace }}/{{ image_prefix}}openstack-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+{% import "macros.j2" as macros with context %}
+
+{% if install_type == 'binary' %}
+    {% if base_distro in ['ubuntu'] %}
+        {% set congress_base_packages = [
+            'congress-common',
+            'congress-server']
+         %}
+
+# TODO(Md Nadeem): need to add congress binary package when it is available in rpm base distro
+#https://trunk.rdoproject.org/
+    {% elif base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+    && /bin/false
+
+    {% endif %}
+
+RUN {{ macros.install_packages(congress_base_packages | customizable("packages")) }}
+
+{% elif install_type == 'source' %}
+
+ADD congress-base-archive /congress-base-source
+RUN ln -s congress-base-source/* congress \
+    && useradd --user-group congress \
+    && /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /congress \
+    && mkdir -p /etc/congress /home/congress \
+    && cp -r /congress/etc/* /etc/congress/ \
+    && chown -R congress: /etc/congress /home/congress
+
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+
+RUN usermod -a -G kolla congress \
+    && touch /usr/local/bin/kolla_congress_extend_start \
+    && chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_congress_extend_start
+
+{% block congress_base_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+{{ include_footer }}
\ No newline at end of file
diff --git a/docker/congress/congress-base/extend_start.sh b/docker/congress/congress-base/extend_start.sh
new file mode 100644
index 0000000000000000000000000000000000000000..99e16e1bf02786c3ea7ec94d1df0261cb495d474
--- /dev/null
+++ b/docker/congress/congress-base/extend_start.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+if [[ ! -d "/var/log/kolla/congress" ]]; then
+    mkdir -p /var/log/kolla/congress
+fi
+if [[ $(stat -c %a /var/log/kolla/congress) != "755" ]]; then
+    chmod 755 /var/log/kolla/congress
+fi
+
+. /usr/local/bin/kolla_congress_extend_start
diff --git a/docker/congress/congress-datasource/Dockerfile.j2 b/docker/congress/congress-datasource/Dockerfile.j2
new file mode 100644
index 0000000000000000000000000000000000000000..5a62891ec0e68933951134523642d31931f0b3b5
--- /dev/null
+++ b/docker/congress/congress-datasource/Dockerfile.j2
@@ -0,0 +1,8 @@
+FROM {{ namespace }}/{{ image_prefix }}congress-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+{% block congress_datasource_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+{{ include_footer }}
+
+USER congress
diff --git a/docker/congress/congress-policy-engine/Dockerfile.j2 b/docker/congress/congress-policy-engine/Dockerfile.j2
new file mode 100644
index 0000000000000000000000000000000000000000..6a1a6d056bee3cd8a6e4c6811267d3d8eeffcd76
--- /dev/null
+++ b/docker/congress/congress-policy-engine/Dockerfile.j2
@@ -0,0 +1,8 @@
+FROM {{ namespace }}/{{ image_prefix }}congress-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+{% block congress_policy_engine_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+{{ include_footer }}
+
+USER congress
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 9bb51ab6c185e597345295f9efa578e7286e1949..2f5c436730912222c77f33ef0bd2cb251e328d6d 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -45,7 +45,8 @@ _PROFILE_OPTS = [
                 help='Main images'),
     cfg.ListOpt('aux',
                 default=['aodh', 'designate', 'gnocchi', 'ironic',
-                         'magnum', 'mistral', 'trove,' 'zaqar', 'zookeeper'],
+                         'magnum', 'mistral', 'trove,' 'zaqar', 'zookeeper',
+                         'congress'],
                 help='Aux Images'),
     cfg.ListOpt('default',
                 default=['cron', 'kolla-toolbox', 'glance', 'haproxy',
@@ -178,6 +179,10 @@ SOURCES = {
         'type': 'url',
         'location': ('http://tarballs.openstack.org/cinder/'
                      'cinder-master.tar.gz')},
+    'congress-base': {
+        'type': 'url',
+        'location': ('http://tarballs.openstack.org/congress/'
+                     'congress-master.tar.gz')},
     'designate-base': {
         'type': 'url',
         'location': ('http://tarballs.openstack.org/designate/'
diff --git a/tests/test_build.py b/tests/test_build.py
index 76fabc48f3a601ec53ae78ac7bb240263491ea2d..d0ea83813f74176542a9333174c575ebcf0f9c5d 100644
--- a/tests/test_build.py
+++ b/tests/test_build.py
@@ -71,8 +71,8 @@ class BuildTestCentosBinary(BuildTest, base.BaseTestCase):
                        "neutron-networking-sfc-agent",
                        "senlin-base",
                        "vmtp",
-                       "watcher-base"
-                       ]
+                       "watcher-base",
+                       "congress-base"]
 
     def setUp(self):
         super(BuildTestCentosBinary, self).setUp()
@@ -93,8 +93,8 @@ class BuildTestCentosSource(BuildTest, base.BaseTestCase):
 class BuildTestUbuntuBinary(BuildTest, base.BaseTestCase):
     excluded_images = ["neutron-networking-sfc-agent",
                        "vmtp",
-                       "zaqar"
-                       ]
+                       "zaqar",
+                       "congress-base"]
 
     def setUp(self):
         super(BuildTestUbuntuBinary, self).setUp()
@@ -116,8 +116,8 @@ class BuildTestOracleLinuxBinary(BuildTest, base.BaseTestCase):
                        "neutron-networking-sfc-agent",
                        "senlin-base",
                        "vmtp",
-                       "watcher-base"
-                       ]
+                       "watcher-base",
+                       "congress-base"]
 
     def setUp(self):
         super(BuildTestOracleLinuxBinary, self).setUp()