diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index e17e9c77ea..34cd051d47 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -417,6 +417,9 @@ Release 2.8.0 - UNRELEASED
YARN-2421. RM still allocates containers to an app in the FINISHING
state (Chang Li via jlowe)
+ YARN-3302. TestDockerContainerExecutor should run automatically if it can
+ detect docker in the usual place (Ravindra Kumar Naik via raviprak)
+
Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDockerContainerExecutor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDockerContainerExecutor.java
index 65e381c526..93868971b2 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDockerContainerExecutor.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestDockerContainerExecutor.java
@@ -51,10 +51,11 @@
* This is intended to test the DockerContainerExecutor code, but it requires
* docker to be installed.
*
- * > mvn clean install -Ddocker-service-url=tcp://0.0.0.0:4243 -DskipTests
+ * mvn test -Ddocker-service-url=tcp://0.0.0.0:4243 -Dtest=TestDockerContainerExecutor
*
*/
public class TestDockerContainerExecutor {
@@ -98,10 +99,13 @@ public void setup() {
dockerUrl = System.getProperty("docker-service-url");
LOG.info("dockerUrl: " + dockerUrl);
- if (Strings.isNullOrEmpty(dockerUrl)) {
+ if (!Strings.isNullOrEmpty(dockerUrl)) {
+ dockerUrl = " -H " + dockerUrl;
+ } else if(isDockerDaemonRunningLocally()) {
+ dockerUrl = "";
+ } else {
return;
}
- dockerUrl = " -H " + dockerUrl;
dockerExec = "docker " + dockerUrl;
conf.set(
YarnConfiguration.NM_DOCKER_CONTAINER_EXECUTOR_IMAGE_NAME, yarnImage);
@@ -136,6 +140,17 @@ private boolean shouldRun() {
return exec != null;
}
+ private boolean isDockerDaemonRunningLocally() {
+ boolean dockerDaemonRunningLocally = true;
+ try {
+ shellExec("docker info");
+ } catch (Exception e) {
+ LOG.info("docker daemon is not running on local machine.");
+ dockerDaemonRunningLocally = false;
+ }
+ return dockerDaemonRunningLocally;
+ }
+
/**
* Test that a docker container can be launched to run a command
* @param cId a fake ContainerID
@@ -200,7 +215,7 @@ public void tearDown() {
* Test that a touch command can be launched successfully in a docker
* container
*/
- @Test
+ @Test(timeout=1000000)
public void testLaunchContainer() throws IOException {
if (!shouldRun()) {
LOG.warn("Docker not installed, aborting test.");