commit 4d490f81697bcbfe4d7a28b86ff09cc60ef3a289 Author: Eric Yang Date: Tue Jan 23 18:55:19 2018 -0500 YARN-7797. Report nodemanager IP for docker container using host network. (Contributed by Eric Yang) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java index f54323c..6c09140 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/runtime/DockerLinuxContainerRuntime.java @@ -58,6 +58,8 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.runtime.ContainerRuntimeConstants; import org.apache.hadoop.yarn.server.nodemanager.containermanager.runtime.ContainerRuntimeContext; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -1023,6 +1025,21 @@ public void reapContainer(ContainerRuntimeContext ctx) String[] ipAndHost = new String[2]; ipAndHost[0] = ips; ipAndHost[1] = host; + if (ips.equals("")) { + // Report back node manager IP and hostname in the event where docker + // inspect reports no IP address. This is for bridging a gap for + // docker environment to run with host network or when docker container + // completed/failed. + InetAddress address; + try { + address = InetAddress.getLocalHost(); + ipAndHost[0] = address.getHostAddress(); + ipAndHost[1] = address.getHostName(); + } catch (UnknownHostException e) { + LOG.error("Can not determine IP and hostname for container:" + + containerId); + } + } return ipAndHost; } catch (ContainerExecutionException e) { LOG.error("Error when writing command to temp file", e);