ソースを参照

Merge pull request #1782 from ndeloof/inherited_volume

fix volume inheritance and conflict with trailing '/'
Nicolas De loof 4 年 前
コミット
43655ba500
1 ファイル変更17 行追加17 行削除
  1. 17 17
      local/compose/create.go

+ 17 - 17
local/compose/create.go

@@ -19,6 +19,7 @@ package compose
 import (
 	"context"
 	"fmt"
+	"path"
 	"path/filepath"
 	"strconv"
 	"strings"
@@ -630,6 +631,7 @@ MOUNTS:
 func buildContainerMountOptions(p types.Project, s types.ServiceConfig, img moby.ImageInspect, inherit *moby.Container) ([]mount.Mount, error) {
 	var mounts = map[string]mount.Mount{}
 	if inherit != nil {
+
 		for _, m := range inherit.Mounts {
 			if m.Type == "tmpfs" {
 				continue
@@ -638,24 +640,20 @@ func buildContainerMountOptions(p types.Project, s types.ServiceConfig, img moby
 			if m.Type == "volume" {
 				src = m.Name
 			}
-			mounts[m.Destination] = mount.Mount{
-				Type:     m.Type,
-				Source:   src,
-				Target:   m.Destination,
-				ReadOnly: !m.RW,
-			}
-		}
-	}
-	if img.ContainerConfig != nil {
-		for k := range img.ContainerConfig.Volumes {
-			m, err := buildMount(p, types.ServiceVolumeConfig{
-				Type:   types.VolumeTypeVolume,
-				Target: k,
-			})
-			if err != nil {
-				return nil, err
+			m.Destination = path.Clean(m.Destination)
+
+			if img.Config != nil {
+				if _, ok := img.Config.Volumes[m.Destination]; ok {
+					// inherit previous container's anonymous volume
+					mounts[m.Destination] = mount.Mount{
+						Type:     m.Type,
+						Source:   src,
+						Target:   m.Destination,
+						ReadOnly: !m.RW,
+					}
+				}
 			}
-			mounts[k] = m
+
 		}
 	}
 
@@ -801,6 +799,8 @@ func buildMount(project types.Project, volume types.ServiceVolumeConfig) (mount.
 
 	bind, vol, tmpfs := buildMountOptions(volume)
 
+	volume.Target = path.Clean(volume.Target)
+
 	return mount.Mount{
 		Type:          mount.Type(volume.Type),
 		Source:        source,