Skip to content

Commit

Permalink
Fix index out of range on compose.buildContainerMountOptions
Browse files Browse the repository at this point in the history
Signed-off-by: Ulysses Souza <[email protected]>
  • Loading branch information
ulyssessouza committed Oct 8, 2021
1 parent fc8a433 commit 44c5e5d
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 16 deletions.
25 changes: 11 additions & 14 deletions pkg/compose/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -750,24 +750,21 @@ func buildContainerMountOptions(p types.Project, s types.ServiceConfig, img moby
}
}
}
for i, v := range s.Volumes {
if v.Target != m.Destination {
volumes := []types.ServiceVolumeConfig{}
for _, v := range s.Volumes {
if v.Target != m.Destination || v.Source != "" {
volumes = append(volumes, v)
continue
}
if v.Source == "" {
// inherit previous container's anonymous volume
mounts[m.Destination] = mount.Mount{
Type: m.Type,
Source: src,
Target: m.Destination,
ReadOnly: !m.RW,
}
// Avoid mount to be later re-defined
l := len(s.Volumes) - 1
s.Volumes[i] = s.Volumes[l]
s.Volumes = s.Volumes[:l]
// inherit previous container's anonymous volume
mounts[m.Destination] = mount.Mount{
Type: m.Type,
Source: src,
Target: m.Destination,
ReadOnly: !m.RW,
}
}
s.Volumes = volumes
}
}

Expand Down
58 changes: 56 additions & 2 deletions pkg/compose/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import (
"path/filepath"
"testing"

"github.com/docker/compose/v2/pkg/api"

"github.com/compose-spec/compose-go/types"
composetypes "github.com/compose-spec/compose-go/types"
"github.com/docker/compose/v2/pkg/api"
moby "github.com/docker/docker/api/types"
mountTypes "github.com/docker/docker/api/types/mount"
"gotest.tools/v3/assert"
)
Expand Down Expand Up @@ -81,3 +81,57 @@ func TestPrepareNetworkLabels(t *testing.T) {
"com.docker.compose.version": api.ComposeVersion,
}))
}

func TestBuildContainerMountOptions(t *testing.T) {
project := composetypes.Project{
Name: "myProject",
Services: []composetypes.ServiceConfig{
{
Name: "myService",
Volumes: []composetypes.ServiceVolumeConfig{
{
Type: composetypes.VolumeTypeVolume,
Target: "/var/myvolume1",
},
{
Type: composetypes.VolumeTypeVolume,
Target: "/var/myvolume2",
},
},
},
},
Volumes: composetypes.Volumes(map[string]composetypes.VolumeConfig{
"myVolume1": {
Name: "myProject_myVolume1",
},
"myVolume2": {
Name: "myProject_myVolume2",
},
}),
}

inherit := &moby.Container{
Mounts: []moby.MountPoint{
{
Type: composetypes.VolumeTypeVolume,
Destination: "/var/myvolume1",
},
{
Type: composetypes.VolumeTypeVolume,
Destination: "/var/myvolume2",
},
},
}

mounts, err := buildContainerMountOptions(project, project.Services[0], moby.ImageInspect{}, inherit)
assert.NilError(t, err)
assert.Assert(t, len(mounts) == 2)
assert.Assert(t, mounts[0].Target == "/var/myvolume1")
assert.Assert(t, mounts[1].Target == "/var/myvolume2")

mounts, err = buildContainerMountOptions(project, project.Services[0], moby.ImageInspect{}, inherit)
assert.NilError(t, err)
assert.Assert(t, len(mounts) == 2)
assert.Assert(t, mounts[0].Target == "/var/myvolume1")
assert.Assert(t, mounts[1].Target == "/var/myvolume2")
}

0 comments on commit 44c5e5d

Please sign in to comment.