diff --git a/ansible/roles/bifrost/tasks/stop.yml b/ansible/roles/bifrost/tasks/stop.yml
index 9a54ab6fc8..02c8f7583a 100644
--- a/ansible/roles/bifrost/tasks/stop.yml
+++ b/ansible/roles/bifrost/tasks/stop.yml
@@ -1,10 +1,35 @@
 ---
-- name: Stopping bifrost_deploy container
-  become: true
-  kolla_docker:
-    action: "stop_container"
-    common_options: "{{ docker_common_options }}"
-    name: "bifrost_deploy"
+- block:
+    - name: Check if bifrost_deploy container is running
+      become: true
+      kolla_container_facts:
+        name:
+          - bifrost_deploy
+      register: container_facts
+
+    - block:
+        # Ensure that all services are stopped gracefully, and in a sensible
+        # order.
+        - name: Stop services gracefully
+          become: true
+          command: docker exec bifrost_deploy systemctl stop {{ item }}.service
+          with_items:
+            - ironic-api
+            - ironic-conductor
+            - ironic-inspector
+            - mariadb
+            - rabbitmq-server
+            - nginx
+
+        - name: Stopping bifrost_deploy container
+          become: true
+          kolla_docker:
+            action: "stop_container"
+            common_options: "{{ docker_common_options }}"
+            name: "bifrost_deploy"
+
+      when: "'bifrost_deploy' in container_facts"
+
   when:
     - inventory_hostname in groups['bifrost']
     - "'bifrost_deploy' not in skip_stop_containers"
diff --git a/ansible/roles/bifrost/tasks/upgrade.yml b/ansible/roles/bifrost/tasks/upgrade.yml
index fae82a1da6..a65ad9bc09 100644
--- a/ansible/roles/bifrost/tasks/upgrade.yml
+++ b/ansible/roles/bifrost/tasks/upgrade.yml
@@ -1,4 +1,5 @@
 ---
-- include_tasks: config.yml
+# Stop the container prior to redeploying it.
+- include_tasks: stop.yml
 
-- include_tasks: start.yml
+- include_tasks: deploy.yml
diff --git a/tools/kolla-ansible b/tools/kolla-ansible
index c07ce13c5e..4ff3d42000 100755
--- a/tools/kolla-ansible
+++ b/tools/kolla-ansible
@@ -70,6 +70,7 @@ Commands:
     stop                Stop Kolla containers
     certificates        Generate self-signed certificate for TLS *For Development Only*
     upgrade             Upgrades existing OpenStack Environment
+    upgrade-bifrost     Upgrades an existing bifrost container
     genconfig           Generate configuration files for enabled OpenStack services
 EOF
 }
@@ -106,6 +107,7 @@ reconfigure
 stop
 certificates
 upgrade
+upgrade-bifrost
 genconfig
 EOF
 }
@@ -324,6 +326,11 @@ EOF
         ACTION="Upgrading OpenStack Environment"
         EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=upgrade -e kolla_serial=${ANSIBLE_SERIAL}"
         ;;
+(upgrade-bifrost)
+        ACTION="Upgrading Bifrost"
+        PLAYBOOK="${BASEDIR}/ansible/bifrost.yml"
+        EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=upgrade"
+        ;;
 (reconfigure)
         ACTION="Reconfigure OpenStack service"
         EXTRA_OPTS="$EXTRA_OPTS -e kolla_action=reconfigure -e kolla_serial=${ANSIBLE_SERIAL}"