diff --git a/ansible/roles/tacker/defaults/main.yml b/ansible/roles/tacker/defaults/main.yml
index 0b0a2c53308d6b1492dfa61354b12d03b7807d1e..0493a7c3807abbd1f89b4df238a9e365c5a4a36a 100644
--- a/ansible/roles/tacker/defaults/main.yml
+++ b/ansible/roles/tacker/defaults/main.yml
@@ -5,6 +5,7 @@ tacker_services:
   tacker-server:
     container_name: "tacker_server"
     group: "tacker-server"
+    host_in_groups: "{{ inventory_hostname in groups['tacker-server'] }}"
     enabled: true
     image: "{{ tacker_server_image_full }}"
     volumes: "{{ tacker_server_default_volumes + tacker_server_extra_volumes }}"
@@ -23,6 +24,7 @@ tacker_services:
   tacker-conductor:
     container_name: "tacker_conductor"
     group: "tacker-conductor"
+    host_in_groups: "{{ inventory_hostname in tacker_conductor_hosts }}"
     enabled: true
     image: "{{ tacker_conductor_image_full }}"
     volumes: "{{ tacker_conductor_default_volumes + tacker_conductor_extra_volumes }}"
@@ -62,11 +64,15 @@ tacker_conductor_default_volumes:
   - "{{ kolla_dev_repos_directory ~ '/tacker/tacker:/var/lib/kolla/venv/lib/python2.7/site-packages/tacker' if tacker_dev_mode | bool else '' }}"
   - "/etc/localtime:/etc/localtime:ro"
   - "kolla_logs:/var/log/kolla/"
+  - "kolla_tacker_vnfpackages:/var/lib/tacker/vnfpackages/"
+  - "kolla_tacker_csar_files:/var/lib/tacker/csar_files/"
 
 tacker_extra_volumes: "{{ default_extra_volumes }}"
 tacker_server_extra_volumes: "{{ tacker_extra_volumes }}"
 tacker_conductor_extra_volumes: "{{ tacker_extra_volumes }}"
 
+tacker_conductor_hosts: "{{ [groups['tacker-conductor']|first] }}"
+
 ####################
 # OpenStack
 ####################
diff --git a/ansible/roles/tacker/tasks/check-containers.yml b/ansible/roles/tacker/tasks/check-containers.yml
index 0155ba076155af542320a53814223af19ba6529c..e3313bd9b2e5c6d0c1108b03aebf912dda509f97 100644
--- a/ansible/roles/tacker/tasks/check-containers.yml
+++ b/ansible/roles/tacker/tasks/check-containers.yml
@@ -8,7 +8,7 @@
     volumes: "{{ item.value.volumes|reject('equalto', '')|list }}"
     dimensions: "{{ item.value.dimensions }}"
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled | bool
   with_dict: "{{ tacker_services }}"
   notify:
diff --git a/ansible/roles/tacker/tasks/config.yml b/ansible/roles/tacker/tasks/config.yml
index 09c35fa54308d3f8fd3ff80c0e0854362f9b2ae3..4c34fe74a4f1bc59bb2247b4dce45b112dbd778e 100644
--- a/ansible/roles/tacker/tasks/config.yml
+++ b/ansible/roles/tacker/tasks/config.yml
@@ -8,7 +8,7 @@
     mode: "0770"
   become: true
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled | bool
   with_dict: "{{ tacker_services }}"
 
@@ -37,7 +37,7 @@
   become: true
   with_dict: "{{ tacker_services }}"
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled
   notify:
     - Restart {{ item.key }} container
@@ -57,7 +57,7 @@
   become: true
   with_dict: "{{ tacker_services }}"
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled | bool
   notify:
     - Restart {{ item.key }} container
@@ -69,7 +69,7 @@
     mode: "0660"
   become: true
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled | bool
     - tacker_policy_file is defined
   with_dict: "{{ tacker_services }}"
diff --git a/ansible/roles/tacker/tasks/pull.yml b/ansible/roles/tacker/tasks/pull.yml
index bffc3f909e317c1429eb5e757f48dded6de88a2c..15b4483b9b8cd4b100c249898271a7ce7b56107e 100644
--- a/ansible/roles/tacker/tasks/pull.yml
+++ b/ansible/roles/tacker/tasks/pull.yml
@@ -6,6 +6,6 @@
     common_options: "{{ docker_common_options }}"
     image: "{{ item.value.image }}"
   when:
-    - inventory_hostname in groups[item.value.group]
+    - item.value.host_in_groups | bool
     - item.value.enabled | bool
   with_dict: "{{ tacker_services }}"
diff --git a/ansible/roles/tacker/templates/tacker-conductor.json.j2 b/ansible/roles/tacker/templates/tacker-conductor.json.j2
index be013e638f82c37069092708392438f652b69997..42060c4c3c6d4bb11a29e4160f1edcf1aa112c84 100644
--- a/ansible/roles/tacker/templates/tacker-conductor.json.j2
+++ b/ansible/roles/tacker/templates/tacker-conductor.json.j2
@@ -19,6 +19,16 @@
             "path": "/var/log/kolla/tacker",
             "owner": "tacker:tacker",
             "recurse": true
+        },
+        {
+            "path": "/var/lib/tacker/vnfpackages",
+            "owner": "tacker:tacker",
+            "recurse": true
+        },
+        {
+            "path": "/var/lib/tacker/csar_files",
+            "owner": "tacker:tacker",
+            "recurse": true
         }
     ]
 }
diff --git a/doc/source/reference/orchestration-and-nfv/tacker-guide.rst b/doc/source/reference/orchestration-and-nfv/tacker-guide.rst
index 5a611c707a77f7ecdc29a3e498f41f7cb1fe198e..18f0fa028fcba844fc2c460a68fc597c61b28d74 100644
--- a/doc/source/reference/orchestration-and-nfv/tacker-guide.rst
+++ b/doc/source/reference/orchestration-and-nfv/tacker-guide.rst
@@ -62,6 +62,13 @@ In order to enable them, you need to edit the file
    and any request made to a different tacker-server will fail with a
    similar error as ``No such file or directory /etc/tacker/vim/fernet_keys``
 
+.. warning::
+
+   In Train, Tacker Conductor started using local filesystem to store VNF
+   packages and CSAR files.
+   Kolla Ansible provides no shared filesystem capabilities, hence only
+   one instance of Tacker Conductor is deployed.
+
 Deploy tacker and related services.
 
 .. code-block:: console
diff --git a/releasenotes/notes/tacker-train-3f3094b68fdf358e.yaml b/releasenotes/notes/tacker-train-3f3094b68fdf358e.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d0aec78cf1392c7abfe6dd2abc8119dd353d9ab1
--- /dev/null
+++ b/releasenotes/notes/tacker-train-3f3094b68fdf358e.yaml
@@ -0,0 +1,9 @@
+---
+upgrade:
+  - |
+    In Train, Tacker Conductor started using local filesystem to store VNF
+    packages and CSAR files.
+    Kolla Ansible provides no shared filesystem capabilities, hence only
+    one instance of Tacker Conductor is deployed.
+    Previous multinode deployments must manually remove all Tacker Conductors
+    before proceeding with upgrade.