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 1872830533f..46a17aac38a 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 @@ -550,21 +550,29 @@ public static void validateHostname(String hostname) throws } /** Set a DNS friendly hostname. */ - private void setHostname(DockerRunCommand runCommand, String - containerIdStr, String name) + private void setHostname(DockerRunCommand runCommand, + String containerIdStr, String network, String name) throws ContainerExecutionException { - if (name == null || name.isEmpty()) { - name = RegistryPathUtils.encodeYarnID(containerIdStr); - String domain = conf.get(RegistryConstants.KEY_DNS_DOMAIN); - if (domain != null) { - name += ("." + domain); + if (network.equalsIgnoreCase("host")) { + if ( name != null && !name.isEmpty()) { + LOG.info("setting hostname in container to: " + name); + runCommand.setHostname(name); } - validateHostname(name); - } + } else { + //get default hostname + if (name == null || name.isEmpty()) { + name = RegistryPathUtils.encodeYarnID(containerIdStr); - LOG.info("setting hostname in container to: " + name); - runCommand.setHostname(name); + String domain = conf.get(RegistryConstants.KEY_DNS_DOMAIN); + if (domain != null) { + name += ("." + domain); + } + validateHostname(name); + } + LOG.info("setting hostname in container to: " + name); + runCommand.setHostname(name); + } } /** @@ -823,12 +831,11 @@ public void launchContainer(ContainerRuntimeContext ctx) DockerRunCommand runCommand = new DockerRunCommand(containerIdStr, dockerRunAsUser, imageName) .setNetworkType(network); - // Only add hostname if network is not host or if Registry DNS is enabled. - if (!network.equalsIgnoreCase("host") || - conf.getBoolean(RegistryConstants.KEY_DNS_ENABLED, - RegistryConstants.DEFAULT_DNS_ENABLED)) { - setHostname(runCommand, containerIdStr, hostname); - } + + // Only add hostname if network is not host or if hostname is + // specified via YARN_CONTAINER_RUNTIME_DOCKER_CONTAINER_HOSTNAME + setHostname(runCommand, containerIdStr, network, hostname); + runCommand.setCapabilities(capabilities); runCommand.addAllReadWriteMountLocations(containerLogDirs);