mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #1207 from crosbymichael/819-use-persistent-volume
* Runtime: Do not overwrite container volumes from config
This commit is contained in:
commit
d6fb313220
2 changed files with 70 additions and 24 deletions
|
@ -520,8 +520,6 @@ func (container *Container) Start(hostConfig *HostConfig) error {
|
||||||
log.Printf("WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.\n")
|
log.Printf("WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.\n")
|
||||||
container.Config.MemorySwap = -1
|
container.Config.MemorySwap = -1
|
||||||
}
|
}
|
||||||
container.Volumes = make(map[string]string)
|
|
||||||
container.VolumesRW = make(map[string]bool)
|
|
||||||
|
|
||||||
// Create the requested bind mounts
|
// Create the requested bind mounts
|
||||||
binds := make(map[string]BindMap)
|
binds := make(map[string]BindMap)
|
||||||
|
@ -561,6 +559,10 @@ func (container *Container) Start(hostConfig *HostConfig) error {
|
||||||
|
|
||||||
// FIXME: evaluate volumes-from before individual volumes, so that the latter can override the former.
|
// FIXME: evaluate volumes-from before individual volumes, so that the latter can override the former.
|
||||||
// Create the requested volumes volumes
|
// Create the requested volumes volumes
|
||||||
|
if container.Volumes == nil || len(container.Volumes) == 0 {
|
||||||
|
container.Volumes = make(map[string]string)
|
||||||
|
container.VolumesRW = make(map[string]bool)
|
||||||
|
|
||||||
for volPath := range container.Config.Volumes {
|
for volPath := range container.Config.Volumes {
|
||||||
volPath = path.Clean(volPath)
|
volPath = path.Clean(volPath)
|
||||||
// If an external bind is defined for this volume, use that as a source
|
// If an external bind is defined for this volume, use that as a source
|
||||||
|
@ -587,6 +589,7 @@ func (container *Container) Start(hostConfig *HostConfig) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if container.Config.VolumesFrom != "" {
|
if container.Config.VolumesFrom != "" {
|
||||||
c := container.runtime.Get(container.Config.VolumesFrom)
|
c := container.runtime.Get(container.Config.VolumesFrom)
|
||||||
|
|
|
@ -1299,3 +1299,46 @@ func TestVolumesFromReadonlyMount(t *testing.T) {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that restarting a container with a volume does not create a new volume on restart. Regression test for #819.
|
||||||
|
func TestRestartWithVolumes(t *testing.T) {
|
||||||
|
runtime := mkRuntime(t)
|
||||||
|
defer nuke(runtime)
|
||||||
|
|
||||||
|
container, err := NewBuilder(runtime).Create(&Config{
|
||||||
|
Image: GetTestImage(runtime).ID,
|
||||||
|
Cmd: []string{"echo", "-n", "foobar"},
|
||||||
|
Volumes: map[string]struct{}{"/test": {}},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer runtime.Destroy(container)
|
||||||
|
|
||||||
|
for key := range container.Config.Volumes {
|
||||||
|
if key != "/test" {
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = container.Output()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := container.Volumes["/test"]
|
||||||
|
if expected == "" {
|
||||||
|
t.Fail()
|
||||||
|
}
|
||||||
|
// Run the container again to verify the volume path persists
|
||||||
|
_, err = container.Output()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
actual := container.Volumes["/test"]
|
||||||
|
if expected != actual {
|
||||||
|
t.Fatalf("Expected volume path: %s Actual path: %s", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue