diff --git a/compose/convert/volume.go b/compose/convert/volume.go index 24442d4dc7..53c50958fa 100644 --- a/compose/convert/volume.go +++ b/compose/convert/volume.go @@ -75,6 +75,9 @@ func convertVolumeToMount(volumeSpec string, stackVolumes volumes, namespace Nam var volumeOptions *mount.VolumeOptions if stackVolume.External.Name != "" { + volumeOptions = &mount.VolumeOptions{ + NoCopy: isNoCopy(mode), + } source = stackVolume.External.Name } else { volumeOptions = &mount.VolumeOptions{ diff --git a/compose/convert/volume_test.go b/compose/convert/volume_test.go index 1132136b22..d218e7c2f5 100644 --- a/compose/convert/volume_test.go +++ b/compose/convert/volume_test.go @@ -105,12 +105,38 @@ func TestConvertVolumeToMountNamedVolumeExternal(t *testing.T) { Type: mount.TypeVolume, Source: "special", Target: "/foo", + VolumeOptions: &mount.VolumeOptions{ + NoCopy: false, + }, } mount, err := convertVolumeToMount("outside:/foo", stackVolumes, namespace) assert.NilError(t, err) assert.DeepEqual(t, mount, expected) } +func TestConvertVolumeToMountNamedVolumeExternalNoCopy(t *testing.T) { + stackVolumes := volumes{ + "outside": composetypes.VolumeConfig{ + External: composetypes.External{ + External: true, + Name: "special", + }, + }, + } + namespace := NewNamespace("foo") + expected := mount.Mount{ + Type: mount.TypeVolume, + Source: "special", + Target: "/foo", + VolumeOptions: &mount.VolumeOptions{ + NoCopy: true, + }, + } + mount, err := convertVolumeToMount("outside:/foo:nocopy", stackVolumes, namespace) + assert.NilError(t, err) + assert.DeepEqual(t, mount, expected) +} + func TestConvertVolumeToMountBind(t *testing.T) { stackVolumes := volumes{} namespace := NewNamespace("foo")