in agent/api/task/task.go [1455:1532]
func (task *Task) dockerHostConfig(container *apicontainer.Container, dockerContainerMap map[string]*apicontainer.DockerContainer, apiVersion dockerclient.DockerVersion, cfg *config.Config) (*dockercontainer.HostConfig, *apierrors.HostConfigError) {
dockerLinkArr, err := task.dockerLinks(container, dockerContainerMap)
if err != nil {
return nil, &apierrors.HostConfigError{Msg: err.Error()}
}
dockerPortMap := task.dockerPortMap(container)
volumesFrom, err := task.dockerVolumesFrom(container, dockerContainerMap)
if err != nil {
return nil, &apierrors.HostConfigError{Msg: err.Error()}
}
binds, err := task.dockerHostBinds(container)
if err != nil {
return nil, &apierrors.HostConfigError{Msg: err.Error()}
}
resources := task.getDockerResources(container, cfg)
// Populate hostConfig
hostConfig := &dockercontainer.HostConfig{
Links: dockerLinkArr,
Binds: binds,
PortBindings: dockerPortMap,
VolumesFrom: volumesFrom,
Resources: resources,
}
if err := task.overrideContainerRuntime(container, hostConfig, cfg); err != nil {
return nil, err
}
if container.DockerConfig.HostConfig != nil {
err := json.Unmarshal([]byte(*container.DockerConfig.HostConfig), hostConfig)
if err != nil {
return nil, &apierrors.HostConfigError{Msg: "Unable to decode given host config: " + err.Error()}
}
}
if err := task.platformHostConfigOverride(hostConfig); err != nil {
return nil, &apierrors.HostConfigError{Msg: err.Error()}
}
// Determine if network mode should be overridden and override it if needed
ok, networkMode := task.shouldOverrideNetworkMode(container, dockerContainerMap)
if ok {
hostConfig.NetworkMode = dockercontainer.NetworkMode(networkMode)
// Override 'awsvpc' parameters if needed
if container.Type == apicontainer.ContainerCNIPause {
// apply ExtraHosts to HostConfig for pause container
if hosts := task.generateENIExtraHosts(); hosts != nil {
hostConfig.ExtraHosts = append(hostConfig.ExtraHosts, hosts...)
}
if task.shouldEnableIPv6() {
// By default, the disable ipv6 setting is turned on, so need to turn it off to enable it.
enableIPv6SysctlSetting(hostConfig)
}
// Override the DNS settings for the pause container if ENI has custom
// DNS settings
return task.overrideDNS(hostConfig), nil
}
}
ok, pidMode := task.shouldOverridePIDMode(container, dockerContainerMap)
if ok {
hostConfig.PidMode = dockercontainer.PidMode(pidMode)
}
ok, ipcMode := task.shouldOverrideIPCMode(container, dockerContainerMap)
if ok {
hostConfig.IpcMode = dockercontainer.IpcMode(ipcMode)
}
return hostConfig, nil
}