Merge pull request #5603 from docker/5591-mount-rename-recreate

Don't break during recreate when a mount target is updated
This commit is contained in:
Joffrey F 2018-01-24 14:15:32 -08:00 committed by GitHub
commit 456906d7ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 2 deletions

View File

@ -1322,7 +1322,6 @@ def get_container_data_volumes(container, volumes_option, tmpfs_option, mounts_o
a mapping of volume bindings for those volumes.
Anonymous volume mounts are updated in place instead.
"""
volumes = []
volumes_option = volumes_option or []
@ -1366,7 +1365,7 @@ def get_container_data_volumes(container, volumes_option, tmpfs_option, mounts_o
continue
ctnr_mount = container_mounts.get(mount.target)
if not ctnr_mount.get('Name'):
if not ctnr_mount or not ctnr_mount.get('Name'):
continue
mount.source = ctnr_mount['Name']

View File

@ -487,6 +487,28 @@ class ServiceTest(DockerClientTestCase):
with pytest.raises(APIError):
self.client.inspect_container(old_container.id)
def test_execute_convergence_plan_recreate_change_mount_target(self):
service = self.create_service(
'db',
volumes=[MountSpec(target='/app1', type='volume')],
entrypoint=['top'], command=['-d', '1']
)
old_container = create_and_start_container(service)
assert (
[mount['Destination'] for mount in old_container.get('Mounts')] ==
['/app1']
)
service.options['volumes'] = [MountSpec(target='/app2', type='volume')]
new_container, = service.execute_convergence_plan(
ConvergencePlan('recreate', [old_container])
)
assert (
[mount['Destination'] for mount in new_container.get('Mounts')] ==
['/app2']
)
def test_execute_convergence_plan_recreate_twice(self):
service = self.create_service(
'db',