YARN-8675. Remove default hostname for docker containers when net=host. Contributed by Suma Shivaprasad

(cherry picked from commit 05b2bbeb35)
This commit is contained in:
Billie Rinaldi 2018-08-27 11:34:33 -07:00
parent 271ed86ac0
commit eefd780918
1 changed files with 29 additions and 20 deletions

View File

@ -137,8 +137,8 @@ import static org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.r
* <li> * <li>
* {@code YARN_CONTAINER_RUNTIME_DOCKER_CONTAINER_HOSTNAME} sets the * {@code YARN_CONTAINER_RUNTIME_DOCKER_CONTAINER_HOSTNAME} sets the
* hostname to be used by the Docker container. If not specified, a * hostname to be used by the Docker container. If not specified, a
* hostname will be derived from the container ID. This variable is * hostname will be derived from the container ID and set as default
* ignored if the network is 'host' and Registry DNS is not enabled. * hostname for networks other than 'host'.
* </li> * </li>
* <li> * <li>
* {@code YARN_CONTAINER_RUNTIME_DOCKER_RUN_PRIVILEGED_CONTAINER} * {@code YARN_CONTAINER_RUNTIME_DOCKER_RUN_PRIVILEGED_CONTAINER}
@ -553,10 +553,22 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
} }
} }
/** Set a DNS friendly hostname. */ /** Set a DNS friendly hostname.
private void setHostname(DockerRunCommand runCommand, String * Only add hostname if network is not host or if hostname is
containerIdStr, String name) * specified via YARN_CONTAINER_RUNTIME_DOCKER_CONTAINER_HOSTNAME
* in host network mode
*/
private void setHostname(DockerRunCommand runCommand,
String containerIdStr, String network, String name)
throws ContainerExecutionException { throws ContainerExecutionException {
if (network.equalsIgnoreCase("host")) {
if (name != null && !name.isEmpty()) {
LOG.info("setting hostname in container to: " + name);
runCommand.setHostname(name);
}
} else {
//get default hostname
if (name == null || name.isEmpty()) { if (name == null || name.isEmpty()) {
name = RegistryPathUtils.encodeYarnID(containerIdStr); name = RegistryPathUtils.encodeYarnID(containerIdStr);
@ -566,10 +578,10 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
} }
validateHostname(name); validateHostname(name);
} }
LOG.info("setting hostname in container to: " + name); LOG.info("setting hostname in container to: " + name);
runCommand.setHostname(name); runCommand.setHostname(name);
} }
}
/** /**
* If CGROUPS in enabled and not set to none, then set the CGROUP parent for * If CGROUPS in enabled and not set to none, then set the CGROUP parent for
@ -827,12 +839,9 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
DockerRunCommand runCommand = new DockerRunCommand(containerIdStr, DockerRunCommand runCommand = new DockerRunCommand(containerIdStr,
dockerRunAsUser, imageName) dockerRunAsUser, imageName)
.setNetworkType(network); .setNetworkType(network);
// Only add hostname if network is not host or if Registry DNS is enabled.
if (!network.equalsIgnoreCase("host") || setHostname(runCommand, containerIdStr, network, hostname);
conf.getBoolean(RegistryConstants.KEY_DNS_ENABLED,
RegistryConstants.DEFAULT_DNS_ENABLED)) {
setHostname(runCommand, containerIdStr, hostname);
}
runCommand.setCapabilities(capabilities); runCommand.setCapabilities(capabilities);
runCommand.addAllReadWriteMountLocations(containerLogDirs); runCommand.addAllReadWriteMountLocations(containerLogDirs);