mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix docker create with duplicate volume failed to remove
Signed-off-by: Lei Jitang <leijitang@huawei.com>
This commit is contained in:
parent
2a95488f78
commit
5e5e1d7ada
2 changed files with 33 additions and 1 deletions
|
@ -65,9 +65,20 @@ func (m mounts) parts(i int) int {
|
|||
// 2. Select the volumes mounted from another containers. Overrides previously configured mount point destination.
|
||||
// 3. Select the bind mounts set by the client. Overrides previously configured mount point destinations.
|
||||
// 4. Cleanup old volumes that are about to be reassigned.
|
||||
func (daemon *Daemon) registerMountPoints(container *container.Container, hostConfig *containertypes.HostConfig) error {
|
||||
func (daemon *Daemon) registerMountPoints(container *container.Container, hostConfig *containertypes.HostConfig) (retErr error) {
|
||||
binds := map[string]bool{}
|
||||
mountPoints := map[string]*volume.MountPoint{}
|
||||
defer func() {
|
||||
// clean up the container mountpoints once return with error
|
||||
if retErr != nil {
|
||||
for _, m := range mountPoints {
|
||||
if m.Volume == nil {
|
||||
continue
|
||||
}
|
||||
daemon.volumes.Dereference(m.Volume, container.ID)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// 1. Read already configured mount points.
|
||||
for name, point := range container.MountPoints {
|
||||
|
|
|
@ -531,6 +531,27 @@ func (s *DockerSuite) TestRunNoDupVolumes(c *check.C) {
|
|||
c.Fatalf("Expected 'duplicate mount point' error, got %v", out)
|
||||
}
|
||||
}
|
||||
|
||||
// Test for https://github.com/docker/docker/issues/22093
|
||||
volumename1 := "test1"
|
||||
volumename2 := "test2"
|
||||
volume1 := volumename1 + someplace
|
||||
volume2 := volumename2 + someplace
|
||||
if out, _, err := dockerCmdWithError("run", "-v", volume1, "-v", volume2, "busybox", "true"); err == nil {
|
||||
c.Fatal("Expected error about duplicate mount definitions")
|
||||
} else {
|
||||
if !strings.Contains(out, "Duplicate mount point") {
|
||||
c.Fatalf("Expected 'duplicate mount point' error, got %v", out)
|
||||
}
|
||||
}
|
||||
// create failed should have create volume volumename1 or volumename2
|
||||
// we should remove volumename2 or volumename2 successfully
|
||||
out, _ := dockerCmd(c, "volume", "ls")
|
||||
if strings.Contains(out, volumename1) {
|
||||
dockerCmd(c, "volume", "rm", volumename1)
|
||||
} else {
|
||||
dockerCmd(c, "volume", "rm", volumename2)
|
||||
}
|
||||
}
|
||||
|
||||
// Test for #1351
|
||||
|
|
Loading…
Add table
Reference in a new issue