You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2014/08/05 00:09:24 UTC
[03/43] git commit: Integrated DockerContainerizer.
Integrated DockerContainerizer.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1ecab99a
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1ecab99a
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1ecab99a
Branch: refs/heads/master
Commit: 1ecab99a039253d474702470397ed15e075a0b3a
Parents: fa400fe
Author: Benjamin Hindman <be...@gmail.com>
Authored: Mon Jun 23 09:33:25 2014 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Mon Aug 4 15:08:15 2014 -0700
----------------------------------------------------------------------
src/slave/containerizer/containerizer.cpp | 11 +++++++
src/slave/containerizer/docker.cpp | 42 +++++++++++++++++++-------
2 files changed, 42 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/1ecab99a/src/slave/containerizer/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/containerizer.cpp b/src/slave/containerizer/containerizer.cpp
index d62d25d..0978dc2 100644
--- a/src/slave/containerizer/containerizer.cpp
+++ b/src/slave/containerizer/containerizer.cpp
@@ -36,6 +36,7 @@
#endif // __linux__
#include "slave/containerizer/composing.hpp"
#include "slave/containerizer/containerizer.hpp"
+#include "slave/containerizer/docker.hpp"
#include "slave/containerizer/isolator.hpp"
#include "slave/containerizer/launcher.hpp"
#include "slave/containerizer/external_containerizer.hpp"
@@ -170,6 +171,16 @@ Try<Containerizer*> Containerizer::create(const Flags& flags, bool local)
} else {
containerizers.push_back(containerizer.get());
}
+ } else if (type == "docker") {
+ Docker docker("docker");
+ Try<DockerContainerizer*> containerizer =
+ DockerContainerizer::create(flags, local, docker);
+ if (containerizer.isError()) {
+ return Error("Could not create DockerContainerizer: " +
+ containerizer.error());
+ } else {
+ containerizers.push_back(containerizer.get());
+ }
} else if (type == "external") {
Try<Containerizer*> containerizer =
ExternalContainerizer::create(flags, local);
http://git-wip-us.apache.org/repos/asf/mesos/blob/1ecab99a/src/slave/containerizer/docker.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp
index 42bbd4c..3d62390 100644
--- a/src/slave/containerizer/docker.cpp
+++ b/src/slave/containerizer/docker.cpp
@@ -403,6 +403,9 @@ Future<Nothing> DockerContainerizerProcess::_recover(
const list<Docker::Container>& containers)
{
foreach (const Docker::Container& container, containers) {
+ VLOG(1) << "Checking if Docker container named '"
+ << container.name() << "' was started by Mesos";
+
Option<ContainerID> id = parse(container);
// Ignore containers that Mesos didn't start.
@@ -410,12 +413,15 @@ Future<Nothing> DockerContainerizerProcess::_recover(
continue;
}
+ VLOG(1) << "Checking if Mesos container with ID '"
+ << stringify(id.get()) << "' has been orphaned";
+
// Check if we're watching an executor for this container ID and
// if not, kill the Docker container.
if (!statuses.keys().contains(id.get())) {
// TODO(benh): Retry 'docker kill' if it failed but the container
// still exists (asynchronously).
- docker.kill(container.name());
+ docker.kill(container.id());
}
}
@@ -478,10 +484,18 @@ Future<bool> DockerContainerizerProcess::launch(
<< "' (and executor '" << executorInfo.executor_id()
<< "') of framework '" << executorInfo.framework_id() << "'";
+ // Extract the Docker image.
+ string image = command.container().image();
+ image = strings::remove(image, "docker://", strings::PREFIX);
+
+ // Construct the Docker container name.
+ string name = DOCKER_NAME_PREFIX + stringify(containerId);
+
// Start a docker container then launch the executor (but destroy
// the Docker container if launching the executor failed).
- return docker.run(command.container().image())
- .then(defer(self(), &Self::_launch,
+ return docker.run(image, command.value(), name)
+ .then(defer(self(),
+ &Self::_launch,
containerId,
taskInfo,
executorInfo,
@@ -674,17 +688,23 @@ void DockerContainerizerProcess::reaped(const ContainerID& containerId)
Option<ContainerID> DockerContainerizerProcess::parse(
const Docker::Container& container)
{
- if (!strings::startsWith(container.name(), DOCKER_NAME_PREFIX)) {
- return None();
+ Option<string> name = None();
+
+ if (strings::startsWith(container.name(), DOCKER_NAME_PREFIX)) {
+ name = strings::remove(
+ container.name(), DOCKER_NAME_PREFIX, strings::PREFIX);
+ } else if (strings::startsWith(container.name(), "/" + DOCKER_NAME_PREFIX)) {
+ name = strings::remove(
+ container.name(), "/" + DOCKER_NAME_PREFIX, strings::PREFIX);
}
- string name = strings::remove(
- container.name(), DOCKER_NAME_PREFIX, strings::PREFIX);
-
- ContainerID id;
- id.set_value(name);
+ if (name.isSome()) {
+ ContainerID id;
+ id.set_value(name.get());
+ return id;
+ }
- return id;
+ return None();
}