Support arbitrary parameters in docker containerizer
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/3f7a9cd9 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/3f7a9cd9 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/3f7a9cd9 Branch: refs/heads/master Commit: 3f7a9cd909a86e40e2484ab3e8ba0d22a49a39c6 Parents: 4cec114 Author: Timothy Chen <[email protected]> Authored: Mon Sep 22 15:04:00 2014 -0700 Committer: Timothy Chen <[email protected]> Committed: Fri Oct 31 17:04:21 2014 -0700 ---------------------------------------------------------------------- include/mesos/mesos.proto | 7 +++++++ src/docker/docker.cpp | 5 +++++ 2 files changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/3f7a9cd9/include/mesos/mesos.proto ---------------------------------------------------------------------- diff --git a/include/mesos/mesos.proto b/include/mesos/mesos.proto index 1d4f673..572c74c 100644 --- a/include/mesos/mesos.proto +++ b/include/mesos/mesos.proto @@ -869,6 +869,7 @@ message ContainerInfo { enum Network { HOST = 1; BRIDGE = 2; + NONE = 3; } optional Network network = 2 [default = HOST]; @@ -883,6 +884,12 @@ message ContainerInfo { repeated PortMapping port_mappings = 3; optional bool privileged = 4 [default = false]; + + // Allowing arbitrary parameters to be passed to docker cli. + // Note that anything passed to this field is not guranteed + // to be supported moving forward, as we might move away from + // the docker cli. + repeated Parameter parameters = 5; } required Type type = 1; http://git-wip-us.apache.org/repos/asf/mesos/blob/3f7a9cd9/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index 81d538a..5b3a4de 100644 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -361,12 +361,17 @@ Future<Nothing> Docker::run( switch (dockerInfo.network()) { case ContainerInfo::DockerInfo::HOST: network = "host"; break; case ContainerInfo::DockerInfo::BRIDGE: network = "bridge"; break; + case ContainerInfo::DockerInfo::NONE: network = "none"; break; default: return Failure("Unsupported Network mode: " + stringify(dockerInfo.network())); } argv.push_back(network); + foreach (const Parameter& parameter, dockerInfo.parameters()) { + argv.push_back("--" + parameter.key() + "=" + parameter.value()); + } + if (dockerInfo.port_mappings().size() > 0) { if (network != "bridge") { return Failure("Port mappings are only supported for bridge network");
