Fix volumes-from mount references.
Signed-off-by: David Calavera <david.calavera@gmail.com>
diff --git a/daemon/volumes.go b/daemon/volumes.go
index 9b82a01..dad7496 100644
--- a/daemon/volumes.go
+++ b/daemon/volumes.go
@@ -191,11 +191,16 @@
}
for _, m := range c.MountPoints {
- cp := m
- cp.RW = m.RW && mode != "ro"
+ cp := &mountPoint{
+ Name: m.Name,
+ Source: m.Source,
+ RW: m.RW && mode != "ro",
+ Driver: m.Driver,
+ Destination: m.Destination,
+ }
- if len(m.Source) == 0 {
- v, err := createVolume(m.Name, m.Driver)
+ if len(cp.Source) == 0 {
+ v, err := createVolume(cp.Name, cp.Driver)
if err != nil {
return err
}
diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go
index 8b43212..d2014a2 100644
--- a/integration-cli/docker_cli_run_test.go
+++ b/integration-cli/docker_cli_run_test.go
@@ -3211,3 +3211,21 @@
c.Fatalf("output should begin with %q, got %q", permissions, out)
}
}
+
+// https://github.com/docker/docker/pull/14498
+func (s *DockerSuite) TestVolumeFromMixedRWOptions(c *check.C) {
+ dockerCmd(c, "run", "--name", "parent", "-v", "/test", "busybox", "true")
+ dockerCmd(c, "run", "--volumes-from", "parent:ro", "--name", "test-volumes-1", "busybox", "true")
+ dockerCmd(c, "run", "--volumes-from", "parent:rw", "--name", "test-volumes-2", "busybox", "true")
+
+ testRO, err := inspectFieldMap("test-volumes-1", ".VolumesRW", "/test")
+ c.Assert(err, check.IsNil)
+ if testRO != "false" {
+ c.Fatalf("Expected RO volume was RW")
+ }
+ testRW, err := inspectFieldMap("test-volumes-2", ".VolumesRW", "/test")
+ c.Assert(err, check.IsNil)
+ if testRW != "true" {
+ c.Fatalf("Expected RW volume was RO")
+ }
+}