فهرست منبع

Volume mounts need to use "Binds" API field

Swarm was putting volume type mounts into the container config's
"Volumes" field, but really these need to go into "Binds".
"Volumes" is only for normal "-v /foo" volumes, not named volumes or
anything else.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Brian Goff 9 سال پیش
والد
کامیت
2bc2165cbf
1فایلهای تغییر یافته به همراه4 افزوده شده و 5 حذف شده
  1. 4 5
      daemon/cluster/executor/container/container.go

+ 4 - 5
daemon/cluster/executor/container/container.go

@@ -91,13 +91,12 @@ func (c *containerConfig) image() string {
 func (c *containerConfig) volumes() map[string]struct{} {
 func (c *containerConfig) volumes() map[string]struct{} {
 	r := make(map[string]struct{})
 	r := make(map[string]struct{})
 
 
-	for _, mount := range c.spec().Mounts {
+	for _, m := range c.spec().Mounts {
 		// pick off all the volume mounts.
 		// pick off all the volume mounts.
-		if mount.Type != api.MountTypeVolume {
+		if m.Type != api.MountTypeVolume || m.Source != "" {
 			continue
 			continue
 		}
 		}
-
-		r[fmt.Sprintf("%s:%s", mount.Target, getMountMask(&mount))] = struct{}{}
+		r[m.Target] = struct{}{}
 	}
 	}
 
 
 	return r
 	return r
@@ -165,7 +164,7 @@ func (c *containerConfig) bindMounts() []string {
 
 
 	for _, val := range c.spec().Mounts {
 	for _, val := range c.spec().Mounts {
 		mask := getMountMask(&val)
 		mask := getMountMask(&val)
-		if val.Type == api.MountTypeBind {
+		if val.Type == api.MountTypeBind || (val.Type == api.MountTypeVolume && val.Source != "") {
 			r = append(r, fmt.Sprintf("%s:%s:%s", val.Source, val.Target, mask))
 			r = append(r, fmt.Sprintf("%s:%s:%s", val.Source, val.Target, mask))
 		}
 		}
 	}
 	}