Error out if file in container at volume path
Fixes #4393 Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
parent
c2f82bba0a
commit
c73e3bf4dc
|
@ -184,6 +184,12 @@ func (container *Container) parseVolumeMountConfig() (map[string]*Mount, error)
|
||||||
continue
|
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)
|
vol, err := container.daemon.volumes.FindOrCreateVolume("", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -4784,3 +4784,20 @@ RUN echo " \
|
||||||
|
|
||||||
logDone("build - test spaces with quotes")
|
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")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue