mirror of
https://github.com/docker/compose.git
synced 2025-07-25 14:44:29 +02:00
Fixes #9403: Remove Named Pipes from volumeMounts
If named pipe mounts are added to the volumeMounts mapping, the docker daemon will report an error that it cannot be mapped. Signed-off-by: Robert Schumacher <ras0219@outlook.com>
This commit is contained in:
parent
def189fae1
commit
f69dec2da8
@ -727,8 +727,12 @@ func (s *composeService) buildContainerVolumes(ctx context.Context, p types.Proj
|
|||||||
binds := []string{}
|
binds := []string{}
|
||||||
MOUNTS:
|
MOUNTS:
|
||||||
for _, m := range mountOptions {
|
for _, m := range mountOptions {
|
||||||
|
if m.Type == mount.TypeNamedPipe {
|
||||||
|
mounts = append(mounts, m)
|
||||||
|
continue
|
||||||
|
}
|
||||||
volumeMounts[m.Target] = struct{}{}
|
volumeMounts[m.Target] = struct{}{}
|
||||||
if m.Type == mount.TypeBind || m.Type == mount.TypeNamedPipe {
|
if m.Type == mount.TypeBind {
|
||||||
// `Mount` is preferred but does not offer option to created host path if missing
|
// `Mount` is preferred but does not offer option to created host path if missing
|
||||||
// so `Bind` API is used here with raw volume string
|
// so `Bind` API is used here with raw volume string
|
||||||
// see https://github.com/moby/moby/issues/43483
|
// see https://github.com/moby/moby/issues/43483
|
||||||
|
@ -44,6 +44,18 @@ func TestBuildBindMount(t *testing.T) {
|
|||||||
assert.Equal(t, mount.Type, mountTypes.TypeBind)
|
assert.Equal(t, mount.Type, mountTypes.TypeBind)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBuildNamedPipeMount(t *testing.T) {
|
||||||
|
project := composetypes.Project{}
|
||||||
|
volume := composetypes.ServiceVolumeConfig{
|
||||||
|
Type: composetypes.VolumeTypeNamedPipe,
|
||||||
|
Source: "\\\\.\\pipe\\docker_engine_windows",
|
||||||
|
Target: "\\\\.\\pipe\\docker_engine",
|
||||||
|
}
|
||||||
|
mount, err := buildMount(project, volume)
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.Equal(t, mount.Type, mountTypes.TypeNamedPipe)
|
||||||
|
}
|
||||||
|
|
||||||
func TestBuildVolumeMount(t *testing.T) {
|
func TestBuildVolumeMount(t *testing.T) {
|
||||||
project := composetypes.Project{
|
project := composetypes.Project{
|
||||||
Name: "myProject",
|
Name: "myProject",
|
||||||
@ -97,6 +109,11 @@ func TestBuildContainerMountOptions(t *testing.T) {
|
|||||||
Type: composetypes.VolumeTypeVolume,
|
Type: composetypes.VolumeTypeVolume,
|
||||||
Target: "/var/myvolume2",
|
Target: "/var/myvolume2",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Type: composetypes.VolumeTypeNamedPipe,
|
||||||
|
Source: "\\\\.\\pipe\\docker_engine_windows",
|
||||||
|
Target: "\\\\.\\pipe\\docker_engine",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -128,18 +145,20 @@ func TestBuildContainerMountOptions(t *testing.T) {
|
|||||||
return mounts[i].Target < mounts[j].Target
|
return mounts[i].Target < mounts[j].Target
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Assert(t, len(mounts) == 2)
|
assert.Assert(t, len(mounts) == 3)
|
||||||
assert.Equal(t, mounts[0].Target, "/var/myvolume1")
|
assert.Equal(t, mounts[0].Target, "/var/myvolume1")
|
||||||
assert.Equal(t, mounts[1].Target, "/var/myvolume2")
|
assert.Equal(t, mounts[1].Target, "/var/myvolume2")
|
||||||
|
assert.Equal(t, mounts[2].Target, "\\\\.\\pipe\\docker_engine")
|
||||||
|
|
||||||
mounts, err = buildContainerMountOptions(project, project.Services[0], moby.ImageInspect{}, inherit)
|
mounts, err = buildContainerMountOptions(project, project.Services[0], moby.ImageInspect{}, inherit)
|
||||||
sort.Slice(mounts, func(i, j int) bool {
|
sort.Slice(mounts, func(i, j int) bool {
|
||||||
return mounts[i].Target < mounts[j].Target
|
return mounts[i].Target < mounts[j].Target
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Assert(t, len(mounts) == 2)
|
assert.Assert(t, len(mounts) == 3)
|
||||||
assert.Equal(t, mounts[0].Target, "/var/myvolume1")
|
assert.Equal(t, mounts[0].Target, "/var/myvolume1")
|
||||||
assert.Equal(t, mounts[1].Target, "/var/myvolume2")
|
assert.Equal(t, mounts[1].Target, "/var/myvolume2")
|
||||||
|
assert.Equal(t, mounts[2].Target, "\\\\.\\pipe\\docker_engine")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetDefaultNetworkMode(t *testing.T) {
|
func TestGetDefaultNetworkMode(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user