diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
index fe6c44fc2e98aea499d16601a4978f94b598271b..24e0369250bb48fed4defeb5b93535a96fedb1f0 100644
--- a/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-alarm && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..0a48ebf52661ad79e01f2cd5a8cc454561443294
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-alarm/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..0f009e4bec11a992835061469b86670c49d24634
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-alarm/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
index 7a1337c7b19fa14df59efa2d8012a94b1b299f2b..387660fff4ca9f80e4a987101e1f7ca37129d2f7 100644
--- a/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
@@ -4,4 +4,5 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-api && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..4ea59dad76aabc40022ef51529e2a8c966eaae8e
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-api/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..589c797ecdf563bcaff0fb4bb6a7814c27388e79
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-api/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
index bd5137306fe38d937e7d09d7628b6ff188d5641c..29ebbdc9312d4bc941f5e8434e8727dbfc680108 100644
--- a/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-central && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..cfc69e75d868f0327ccffc9be88e5d3a8e65056e
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-central/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..86fd40c4aa872e4222611555ca1340a88687b5e9
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-central/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
index 6c54dce4ab8c52832fbe7b996dfa80ac2bcc655b..a715014ce9972832cc6af98ef85c685b8ae219ac 100644
--- a/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-collector && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..e16dcecc181ac4c73f5c0934c3c49d8bc5e30bd9
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-collector/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..de90be372268af863b1e7d2e58493496680b7378
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-collector/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
index 9f2a701d8ef96e7b42decbc1ddd0284598a9a122..3d476d8e52b73cf5343fc66f83c1f90bcea11d12 100644
--- a/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
@@ -5,4 +5,6 @@ RUN yum install -y openstack-ceilometer-compute python-ceilometerclient python-p
     && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..1d0c728e57b4e17a3062bff31c23abde810d0534
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-compute/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..ceefe1a9e7c5249f972caa5b884b550209c4829d
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-compute/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
index 72d291bcb20c56c28688c9947d662502c672e726..7d6f2763d6ba2a7f4fa4e319d2c3215decff8350 100644
--- a/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-notification && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh
new file mode 120000
index 0000000000000000000000000000000000000000..12d98d9eeb894ecef7c44eac985af9659a9b15b3
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-notification/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh
new file mode 120000
index 0000000000000000000000000000000000000000..75a4ba990e0cd77fe87366a1bc238fac188f4ee8
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-notification/config-internal.sh
\ No newline at end of file
diff --git a/docker/common/ceilometer/ceilometer-alarm/config-external.sh b/docker/common/ceilometer/ceilometer-alarm/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-alarm/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-alarm/config-internal.sh b/docker/common/ceilometer/ceilometer-alarm/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7470ae608f0762b48968a933ed3911f42fbf56b9
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-alarm/config-internal.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-alarm-evaluator &
+exec /usr/bin/ceilometer-alarm-notifier
diff --git a/docker/common/ceilometer/ceilometer-alarm/start.sh b/docker/common/ceilometer/ceilometer-alarm/start.sh
index 7470ae608f0762b48968a933ed3911f42fbf56b9..cd42a83ef3acad8382cfed52661d9f632e2ff2d5 100644
--- a/docker/common/ceilometer/ceilometer-alarm/start.sh
+++ b/docker/common/ceilometer/ceilometer-alarm/start.sh
@@ -1,10 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-alarm"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-alarm-evaluator &
-exec /usr/bin/ceilometer-alarm-notifier
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-api/config-external.sh b/docker/common/ceilometer/ceilometer-api/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-api/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-api/config-internal.sh b/docker/common/ceilometer/ceilometer-api/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f081c9f84de535b688bd5a6b43ab0782b3185eeb
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-api/config-internal.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+check_required_vars CEILOMETER_DB_USER CEILOMETER_DB_NAME \
+                    CEILOMETER_DB_PASSWORD KEYSTONE_ADMIN_TOKEN \
+                    KEYSTONE_AUTH_PROTOCOL KEYSTONE_ADMIN_SERVICE_HOST \
+                    KEYSTONE_ADMIN_SERVICE_PORT ADMIN_TENANT_NAME \
+                    CEILOMETER_KEYSTONE_USER CEILOMETER_ADMIN_PASSWORD \
+                    CEILOMETER_API_SERVICE_HOST PUBLIC_IP
+
+fail_unless_os_service_running keystone
+fail_unless_db
+
+#TODO(pkilambi): Add mongodb support
+
+mysql -h ${MARIADB_SERVICE_HOST} -u root -p${DB_ROOT_PASSWORD} mysql <<EOF
+CREATE DATABASE IF NOT EXISTS ${CEILOMETER_DB_NAME} DEFAULT CHARACTER SET utf8;
+GRANT ALL PRIVILEGES ON ${CEILOMETER_DB_NAME}.* TO
+       '${CEILOMETER_DB_USER}'@'%' IDENTIFIED BY '${CEILOMETER_DB_PASSWORD}'
+
+EOF
+
+
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+
+
+crux user-create -n ${CEILOMETER_KEYSTONE_USER} \
+    -p ${CEILOMETER_ADMIN_PASSWORD} \
+    -t ${ADMIN_TENANT_NAME} \
+    -r admin
+
+crux service-create -n ${CEILOMETER_KEYSTONE_USER} -t metering \
+    -d "Ceilometer Telemetry Service"
+
+crux endpoint-create i--remove-all -n ${CEILOMETER_KEYSTONE_USER} -t metering \
+    -I "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777" \
+    -P "${KEYSTONE_AUTH_PROTOCOL}://${PUBLIC_IP}:8777" \
+    -A "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777"
+
+cfg=/etc/ceilometer/ceilometer.conf
+crudini --set $cfg \
+    DEFAULT connection
+    "mysql://${CEILOMETER_DB_USER}:${CEILOMETER_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${CEILOMETER_DB_NAME}"
+
+
+exec /usr/bin/ceilometer-api
diff --git a/docker/common/ceilometer/ceilometer-api/start.sh b/docker/common/ceilometer/ceilometer-api/start.sh
index f081c9f84de535b688bd5a6b43ab0782b3185eeb..0f660e025ada89a8c5978a8d0b8e4508fa5ac89e 100644
--- a/docker/common/ceilometer/ceilometer-api/start.sh
+++ b/docker/common/ceilometer/ceilometer-api/start.sh
@@ -1,51 +1,21 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-api"
+ARGS=""
 
-check_required_vars CEILOMETER_DB_USER CEILOMETER_DB_NAME \
-                    CEILOMETER_DB_PASSWORD KEYSTONE_ADMIN_TOKEN \
-                    KEYSTONE_AUTH_PROTOCOL KEYSTONE_ADMIN_SERVICE_HOST \
-                    KEYSTONE_ADMIN_SERVICE_PORT ADMIN_TENANT_NAME \
-                    CEILOMETER_KEYSTONE_USER CEILOMETER_ADMIN_PASSWORD \
-                    CEILOMETER_API_SERVICE_HOST PUBLIC_IP
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-fail_unless_os_service_running keystone
-fail_unless_db
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-#TODO(pkilambi): Add mongodb support
+# 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
+    su -s /bin/sh -c "ceilometer-manage db_sync" ceilometer
+    exit 0
+fi
 
-mysql -h ${MARIADB_SERVICE_HOST} -u root -p${DB_ROOT_PASSWORD} mysql <<EOF
-CREATE DATABASE IF NOT EXISTS ${CEILOMETER_DB_NAME} DEFAULT CHARACTER SET utf8;
-GRANT ALL PRIVILEGES ON ${CEILOMETER_DB_NAME}.* TO
-       '${CEILOMETER_DB_USER}'@'%' IDENTIFIED BY '${CEILOMETER_DB_PASSWORD}'
-
-EOF
-
-
-export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
-export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
-
-
-crux user-create -n ${CEILOMETER_KEYSTONE_USER} \
-    -p ${CEILOMETER_ADMIN_PASSWORD} \
-    -t ${ADMIN_TENANT_NAME} \
-    -r admin
-
-crux service-create -n ${CEILOMETER_KEYSTONE_USER} -t metering \
-    -d "Ceilometer Telemetry Service"
-
-crux endpoint-create i--remove-all -n ${CEILOMETER_KEYSTONE_USER} -t metering \
-    -I "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777" \
-    -P "${KEYSTONE_AUTH_PROTOCOL}://${PUBLIC_IP}:8777" \
-    -A "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777"
-
-cfg=/etc/ceilometer/ceilometer.conf
-crudini --set $cfg \
-    DEFAULT connection
-    "mysql://${CEILOMETER_DB_USER}:${CEILOMETER_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${CEILOMETER_DB_NAME}"
-
-
-exec /usr/bin/ceilometer-api
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-central/config-external.sh b/docker/common/ceilometer/ceilometer-central/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-central/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-central/config-internal.sh b/docker/common/ceilometer/ceilometer-central/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..76f9a1fc2c14a6f93f218a487985ef61df0455b0
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-central/config-internal.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_AUTH_PROTOCOL \
+                    KEYSTONE_ADMIN_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_PORT
+
+fail_unless_os_service_running keystone
+
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+
+exec /usr/bin/ceilometer-agent-central
diff --git a/docker/common/ceilometer/ceilometer-central/start.sh b/docker/common/ceilometer/ceilometer-central/start.sh
index 76f9a1fc2c14a6f93f218a487985ef61df0455b0..f9c317828a75939f2e1a818309ed112af99042ed 100644
--- a/docker/common/ceilometer/ceilometer-central/start.sh
+++ b/docker/common/ceilometer/ceilometer-central/start.sh
@@ -1,14 +1,14 @@
 #!/bin/bash
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+set -o errexit
 
-check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_AUTH_PROTOCOL \
-                    KEYSTONE_ADMIN_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_PORT
+CMD="/usr/bin/ceilometer-agent-central"
+ARGS=""
 
-fail_unless_os_service_running keystone
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
-export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-exec /usr/bin/ceilometer-agent-central
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-collector/config-external.sh b/docker/common/ceilometer/ceilometer-collector/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-collector/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-collector/config-internal.sh b/docker/common/ceilometer/ceilometer-collector/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1ed4c9e7d0122e8eb4b2e31e8ee579f1f408dd56
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-collector/config-internal.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-collector
diff --git a/docker/common/ceilometer/ceilometer-collector/start.sh b/docker/common/ceilometer/ceilometer-collector/start.sh
index 1ed4c9e7d0122e8eb4b2e31e8ee579f1f408dd56..dee31e404a613e80823c18f176f74cc070fa3cee 100644
--- a/docker/common/ceilometer/ceilometer-collector/start.sh
+++ b/docker/common/ceilometer/ceilometer-collector/start.sh
@@ -1,9 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-collector"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-collector
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-compute/config-external.sh b/docker/common/ceilometer/ceilometer-compute/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-compute/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-compute/config-internal.sh b/docker/common/ceilometer/ceilometer-compute/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f4fc30baeea96849943a9d2b287d5aa22951961b
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-compute/config-internal.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+check_required_vars KEYSTONE_ADMIN_TOKEN RABBITMQ_SERVICE_HOST RABBIT_PASSWORD
+
+fail_unless_os_service_running keystone
+
+# Nova conf settings
+crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit True
+crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit_period hour
+crudini --set /etc/nova/nova.conf DEFAULT notify_on_state_change vm_and_task_state
+crudini --set /etc/nova/nova.conf DEFAULT notification_driver nova.openstack.common.notifier.rpc_notifier
+crudini --set /etc/nova/nova.conf DEFAULT notification_driver ceilometer.compute.nova_notifier
+
+#ceilometer settings
+cfg=/etc/ceilometer/ceilometer.conf
+crudini --set $cfg publisher_rpc metering_secret ${KEYSTONE_ADMIN_TOKEN}
+crudini --set $cfg rabbit_host ${RABBITMQ_SERVICE_HOST}
+crudini --set $cfg rabbit_password ${RABBIT_PASSWORD}
+
+
+exec /usr/bin/ceilometer-agent-compute
diff --git a/docker/common/ceilometer/ceilometer-compute/start.sh b/docker/common/ceilometer/ceilometer-compute/start.sh
index f4fc30baeea96849943a9d2b287d5aa22951961b..dff79dd1b1a0e955f1e6099ee9d44fefa1359433 100644
--- a/docker/common/ceilometer/ceilometer-compute/start.sh
+++ b/docker/common/ceilometer/ceilometer-compute/start.sh
@@ -1,25 +1,14 @@
 #!/bin/bash
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+set -o errexit
 
+CMD="/usr/bin/ceilometer-agent-compute"
+ARGS=""
 
-check_required_vars KEYSTONE_ADMIN_TOKEN RABBITMQ_SERVICE_HOST RABBIT_PASSWORD
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-fail_unless_os_service_running keystone
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-# Nova conf settings
-crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit True
-crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit_period hour
-crudini --set /etc/nova/nova.conf DEFAULT notify_on_state_change vm_and_task_state
-crudini --set /etc/nova/nova.conf DEFAULT notification_driver nova.openstack.common.notifier.rpc_notifier
-crudini --set /etc/nova/nova.conf DEFAULT notification_driver ceilometer.compute.nova_notifier
-
-#ceilometer settings
-cfg=/etc/ceilometer/ceilometer.conf
-crudini --set $cfg publisher_rpc metering_secret ${KEYSTONE_ADMIN_TOKEN}
-crudini --set $cfg rabbit_host ${RABBITMQ_SERVICE_HOST}
-crudini --set $cfg rabbit_password ${RABBIT_PASSWORD}
-
-
-exec /usr/bin/ceilometer-agent-compute
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-notification/config-external.sh b/docker/common/ceilometer/ceilometer-notification/config-external.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2835bd5aa097d818368603ba4145b3d15d76f93e
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-notification/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-notification/config-internal.sh b/docker/common/ceilometer/ceilometer-notification/config-internal.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9397345497a0efc8db57bba0e0b2ddd2decd504b
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-notification/config-internal.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-agent-notification
diff --git a/docker/common/ceilometer/ceilometer-notification/start.sh b/docker/common/ceilometer/ceilometer-notification/start.sh
index 9397345497a0efc8db57bba0e0b2ddd2decd504b..1fc97ff214950265c4d97a452a3f78200bc2db02 100644
--- a/docker/common/ceilometer/ceilometer-notification/start.sh
+++ b/docker/common/ceilometer/ceilometer-notification/start.sh
@@ -1,9 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-agent-notification"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-agent-notification
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS