diff --git a/docs/sources/reference/api/docker_remote_api_v1.19.md b/docs/sources/reference/api/docker_remote_api_v1.19.md index 5175ed9782..c252f6211a 100644 --- a/docs/sources/reference/api/docker_remote_api_v1.19.md +++ b/docs/sources/reference/api/docker_remote_api_v1.19.md @@ -142,6 +142,7 @@ Create a container "ExposedPorts": { "22/tcp": {} }, + VolumeDriver: "local", "HostConfig": { "Binds": ["/tmp:/tmp"], "Links": ["redis3:redis"], @@ -222,15 +223,15 @@ Json Parameters: container - **ExposedPorts** - An object mapping ports to an empty object in the form of: `"ExposedPorts": { "/: {}" }` +- **VolumeDriver** - A string value containing the volume driver to use, `local` by default. - **HostConfig** - **Binds** – A list of volume bindings for this container. Each volume binding is a string of the form `container_path` (to create a new volume for the container), `host_path:container_path` (to bind-mount a host path into the container), `host_path:container_path:ro` (to make the bind-mount read-only inside the container), or - `volume_plugin/volume_name:container_path` (to provision a - volume named `volume_name` from a [volume plugin](/userguide/plugins) - named `volume_plugin`). + `volume_name:container_path` (to provision a volume named `volume_name` + from a [volume plugin](/userguide/plugins)). - **Links** - A list of links for the container. Each link entry should be in the form of `container_name:alias`. - **LxcConf** - LXC specific configurations. These configurations will only diff --git a/integration-cli/docker_cli_start_volume_driver_unix_test.go b/integration-cli/docker_cli_start_volume_driver_unix_test.go index 4d6d44a537..5b4223dd8a 100644 --- a/integration-cli/docker_cli_start_volume_driver_unix_test.go +++ b/integration-cli/docker_cli_start_volume_driver_unix_test.go @@ -1,3 +1,4 @@ +// +build experimental // +build !windows package main @@ -136,15 +137,3 @@ func (s *ExternalVolumeSuite) TestStartExternalVolumeDriver(c *check.C) { c.Fatalf("External volume mount failed. Output: %s\n", out) } } - -func (s *ExternalVolumeSuite) TestStartExternalVolumeNamedDriver(c *check.C) { - runCmd := exec.Command(dockerBinary, "run", "--name", "test-data", "-v", "test-external-volume-driver/volume-1:/tmp/external-volume-test", "busybox:latest", "cat", "/tmp/external-volume-test/test") - out, stderr, exitCode, err := runCommandWithStdoutStderr(runCmd) - if err != nil && exitCode != 0 { - c.Fatal(out, stderr, err) - } - - if !strings.Contains(out, s.server.URL) { - c.Fatalf("External volume mount failed. Output: %s\n", out) - } -} diff --git a/runconfig/parse.go b/runconfig/parse.go index e9f0b51577..46ec267851 100644 --- a/runconfig/parse.go +++ b/runconfig/parse.go @@ -77,7 +77,6 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe flReadonlyRootfs = cmd.Bool([]string{"-read-only"}, false, "Mount the container's root filesystem as read only") flLoggingDriver = cmd.String([]string{"-log-driver"}, "", "Logging driver for container") flCgroupParent = cmd.String([]string{"-cgroup-parent"}, "", "Optional parent cgroup for the container") - flVolumeDriver = cmd.String([]string{"-volume-driver"}, "", "Optional volume driver for the container") ) cmd.Var(&flAttach, []string{"a", "-attach"}, "Attach to STDIN, STDOUT or STDERR") @@ -101,6 +100,8 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe cmd.Var(flUlimits, []string{"-ulimit"}, "Ulimit options") cmd.Var(&flLoggingOpts, []string{"-log-opt"}, "Log driver options") + expFlags := attachExperimentalFlags(cmd) + cmd.Require(flag.Min, 1) if err := cmd.ParseFlags(args, true); err != nil { @@ -318,7 +319,6 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe Entrypoint: entrypoint, WorkingDir: *flWorkingDir, Labels: convertKVStringsToMap(labels), - VolumeDriver: *flVolumeDriver, } hostConfig := &HostConfig{ @@ -357,6 +357,8 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe CgroupParent: *flCgroupParent, } + applyExperimentalFlags(expFlags, config, hostConfig) + // When allocating stdin in attached mode, close stdin at client disconnect if config.OpenStdin && config.AttachStdin { config.StdinOnce = true diff --git a/runconfig/parse_experimental.go b/runconfig/parse_experimental.go new file mode 100644 index 0000000000..886b377fa8 --- /dev/null +++ b/runconfig/parse_experimental.go @@ -0,0 +1,19 @@ +// +build experimental + +package runconfig + +import flag "github.com/docker/docker/pkg/mflag" + +type experimentalFlags struct { + flags map[string]interface{} +} + +func attachExperimentalFlags(cmd *flag.FlagSet) *experimentalFlags { + flags := make(map[string]interface{}) + flags["volume-driver"] = cmd.String([]string{"-volume-driver"}, "", "Optional volume driver for the container") + return &experimentalFlags{flags: flags} +} + +func applyExperimentalFlags(exp *experimentalFlags, config *Config, hostConfig *HostConfig) { + config.VolumeDriver = *(exp.flags["volume-driver"]).(*string) +} diff --git a/runconfig/parse_stub.go b/runconfig/parse_stub.go new file mode 100644 index 0000000000..391b6ed43b --- /dev/null +++ b/runconfig/parse_stub.go @@ -0,0 +1,14 @@ +// +build !experimental + +package runconfig + +import flag "github.com/docker/docker/pkg/mflag" + +type experimentalFlags struct{} + +func attachExperimentalFlags(cmd *flag.FlagSet) *experimentalFlags { + return nil +} + +func applyExperimentalFlags(flags *experimentalFlags, config *Config, hostConfig *HostConfig) { +}