diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index 864ec2adbe4aeafd0273fe3b195ac267eb4ded62..22a6278f4c219ea988a571c210a6af7410cde2b5 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -202,15 +202,17 @@ COPY apt_preferences.{{ base_distro }} /etc/apt/preferences
 {% set base_apt_packages = [
    'curl',
    'gawk',
+   'kmod',
    'lvm2',
    'open-iscsi',
    'python',
+   'sudo',
    'tgt']
 %}
 
 {% if base_distro == 'ubuntu' %}
     {% set base_apt_keys = [
-      '199369E5404BD5FC7D2FE43BCBCB082A1BB943DB',
+      '0xF1656F24C74CD1D8',
       '391A9AA2147192839E9DB0315EDB1B62EC4926EA',
       '430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A',
       '08B73419AC32B4E966C1A330E84AC2C0460F3994',
diff --git a/docker/base/sources.list.ubuntu b/docker/base/sources.list.ubuntu
index 4cabfa07ef62a2873b9e84e61d1c942bd47a9232..b000673c5b2c991187cc541c17f2896c9be22a1a 100644
--- a/docker/base/sources.list.ubuntu
+++ b/docker/base/sources.list.ubuntu
@@ -1,23 +1,23 @@
 # Default repos
-deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
-deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
-deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
+deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
+deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
+deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
 
 # Backports have a lower priority and must be explicitly installed to be used
-deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
+deb http://archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
 
 # We need to add the Liberty repo for the updated packages they provide. The main
 # ones are qemu, libvirt, and openvswitch.
-deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/mitaka main
+deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/newton main
 
 # MariaDB 10.0 repo
-deb http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main
+deb http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu xenial main
 
 # Percona repo (for xtrabackup)
-deb http://repo.percona.com/apt trusty main
+deb http://repo.percona.com/apt xenial main
 
 # Ceph repo
-deb http://download.ceph.com/debian-hammer/ trusty main
+deb http://download.ceph.com/debian-hammer/ xenial main
 
 # Elastic repo
 deb http://packages.elastic.co/elasticsearch/2.x/debian stable main
@@ -26,7 +26,7 @@ deb http://packages.elastic.co/elasticsearch/2.x/debian stable main
 deb http://packages.elastic.co/kibana/4.4/debian stable main
 
 # Docker repo
-deb http://apt.dockerproject.org/repo ubuntu-trusty main
+deb http://apt.dockerproject.org/repo ubuntu-xenial main
 
 # InfluxDB repo
-deb https://repos.influxdata.com/ubuntu trusty stable
+deb https://repos.influxdata.com/ubuntu xenial stable
diff --git a/docker/elasticsearch/Dockerfile.j2 b/docker/elasticsearch/Dockerfile.j2
index 2e04349bc1747bf6bbe21d63c61a8b56fe43a1b7..73b320889c62a491595ca890279a42016cfeba7e 100644
--- a/docker/elasticsearch/Dockerfile.j2
+++ b/docker/elasticsearch/Dockerfile.j2
@@ -13,11 +13,11 @@ ENV JAVA_HOME /usr/lib/jvm/jre-1.7.0-openjdk/
 
 {% elif base_distro in ['ubuntu', 'debian'] %}
     {% set elasticsearch_packages = [
-       'openjdk-7-jre',
+       'openjdk-8-jre',
        'elasticsearch'
     ] %}
 
-ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-amd64/
+ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
 
 {% endif %}
 
diff --git a/docker/neutron/neutron-base/Dockerfile.j2 b/docker/neutron/neutron-base/Dockerfile.j2
index 0cf05f786d2d9fdba9985729fb034937c85813f4..a30ea45f56d359d5114bfaee95cea6383ab88db5 100644
--- a/docker/neutron/neutron-base/Dockerfile.j2
+++ b/docker/neutron/neutron-base/Dockerfile.j2
@@ -45,6 +45,7 @@ RUN apt-get -y install --no-install-recommends \
         conntrack \
         dnsmasq \
         dnsmasq-utils \
+        iproute2 \
         ipset \
         iptables \
         openvswitch-switch \
diff --git a/docker/nova/nova-base/Dockerfile.j2 b/docker/nova/nova-base/Dockerfile.j2
index ff25dcfe5b9d07bc8e0c88242a35b24a51c57d2b..737e0294c81d3a19a258a733c7272a6a251dd1a4 100644
--- a/docker/nova/nova-base/Dockerfile.j2
+++ b/docker/nova/nova-base/Dockerfile.j2
@@ -34,6 +34,7 @@ RUN yum -y install \
 
 RUN apt-get -y install --no-install-recommends \
         iptables \
+        iproute2 \
         ebtables \
         dnsmasq \
         bridge-utils \
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 2f5c436730912222c77f33ef0bd2cb251e328d6d..740bfab2f328210dd922550ae654ef6f25a65e2e 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -24,7 +24,7 @@ DISTRO_RELEASE = {
     'redhat': '7',
     'oraclelinux': '7',
     'debian': '8',
-    'ubuntu': '14.04',
+    'ubuntu': '16.04',
 }
 DELOREAN = ("http://buildlogs.centos.org/centos/7/cloud/x86_64/"
             "rdo-trunk-master-tested/delorean.repo")
diff --git a/releasenotes/notes/upgade-to-ubuntu-xenial-93e68d2330e9bd84.yaml b/releasenotes/notes/upgade-to-ubuntu-xenial-93e68d2330e9bd84.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a82986c1b1658449b2eaf6822459f7c42b7c9d20
--- /dev/null
+++ b/releasenotes/notes/upgade-to-ubuntu-xenial-93e68d2330e9bd84.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Upgrade Ubuntu base image to Xenial