diff --git a/daemon/create.go b/daemon/create.go index 65bdf28d9c..f9d986491f 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -100,6 +100,13 @@ func (daemon *Daemon) Create(config *runconfig.Config, hostConfig *runconfig.Hos return nil, nil, err } } + if err := container.Mount(); err != nil { + return nil, nil, err + } + defer container.Unmount() + if err := container.prepareVolumes(); err != nil { + return nil, nil, err + } if err := container.ToDisk(); err != nil { return nil, nil, err } diff --git a/docs/sources/reference/api/docker_remote_api.md b/docs/sources/reference/api/docker_remote_api.md index d61b25bf0b..530b15d41a 100644 --- a/docs/sources/reference/api/docker_remote_api.md +++ b/docs/sources/reference/api/docker_remote_api.md @@ -58,6 +58,9 @@ a list of daemon labels (`Labels`). **New!** You can set the new container's MAC address explicitly. +**New!** +Volumes are now initialized when the container is created. + `POST /containers/(id)/start` **New!** diff --git a/integration-cli/docker_cli_create_test.go b/integration-cli/docker_cli_create_test.go index d85fde1930..498065b64d 100644 --- a/integration-cli/docker_cli_create_test.go +++ b/integration-cli/docker_cli_create_test.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "os" "os/exec" "testing" "time" @@ -125,3 +126,21 @@ func TestCreateEchoStdout(t *testing.T) { logDone("create - echo test123") } + +func TestCreateVolumesCreated(t *testing.T) { + name := "test_create_volume" + cmd(t, "create", "--name", name, "-v", "/foo", "busybox") + dir, err := inspectFieldMap(name, "Volumes", "/foo") + if err != nil { + t.Fatalf("Error getting volume host path: %q", err) + } + + if _, err := os.Stat(dir); err != nil && os.IsNotExist(err) { + t.Fatalf("Volume was not created") + } + if err != nil { + t.Fatalf("Error statting volume host path: %q", err) + } + + logDone("create - volumes are created") +}