Forráskód Böngészése

Error out if file in container at volume path

Fixes #4393

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Brian Goff 10 éve
szülő
commit
c73e3bf4dc
2 módosított fájl, 23 hozzáadás és 0 törlés
  1. 6 0
      daemon/volumes.go
  2. 17 0
      integration-cli/docker_cli_build_test.go

+ 6 - 0
daemon/volumes.go

@@ -184,6 +184,12 @@ func (container *Container) parseVolumeMountConfig() (map[string]*Mount, error)
 			continue
 		}
 
+		if stat, err := os.Stat(filepath.Join(container.basefs, path)); err == nil {
+			if !stat.IsDir() {
+				return nil, fmt.Errorf("file exists at %s, can't create volume there")
+			}
+		}
+
 		vol, err := container.daemon.volumes.FindOrCreateVolume("", true)
 		if err != nil {
 			return nil, err

+ 17 - 0
integration-cli/docker_cli_build_test.go

@@ -4784,3 +4784,20 @@ RUN echo "  \
 
 	logDone("build - test spaces with quotes")
 }
+
+// #4393
+func TestBuildVolumeFileExistsinContainer(t *testing.T) {
+	buildCmd := exec.Command(dockerBinary, "build", "-t", "docker-test-errcreatevolumewithfile", "-")
+	buildCmd.Stdin = strings.NewReader(`
+	FROM busybox
+	RUN touch /foo
+	VOLUME /foo
+	`)
+
+	out, _, err := runCommandWithOutput(buildCmd)
+	if err == nil || !strings.Contains(out, "file exists") {
+		t.Fatalf("expected build to fail when file exists in container at requested volume path")
+	}
+
+	logDone("build - errors when volume is specified where a file exists")
+}