// modifyCommonNamespaceOptions apply common namespace options for sandbox and container func modifyCommonNamespaceOptions(nsOpts *runtimeapi.NamespaceOption, hostConfig *dockercontainer.HostConfig) { if nsOpts != nil { if nsOpts.GetHostPid() { hostConfig.PidMode = namespaceModeHost } if nsOpts.GetHostIpc() { hostConfig.IpcMode = namespaceModeHost } } }
// modifyHostNetworkOptionForContainer applies NetworkMode/UTSMode to container's dockercontainer.HostConfig. func modifyHostNetworkOptionForContainer(hostNetwork bool, sandboxID string, hc *dockercontainer.HostConfig) { sandboxNSMode := fmt.Sprintf("container:%v", sandboxID) hc.NetworkMode = dockercontainer.NetworkMode(sandboxNSMode) hc.IpcMode = dockercontainer.IpcMode(sandboxNSMode) hc.UTSMode = "" hc.PidMode = "" if hostNetwork { hc.UTSMode = namespaceModeHost } }
func (c *Container) addIpc(config *container.HostConfig, service project.Service, containers []project.Container) (*container.HostConfig, error) { if len(containers) == 0 { return nil, fmt.Errorf("Failed to find container for IPC %v", c.service.Config().Ipc) } id, err := containers[0].ID() if err != nil { return nil, err } config.IpcMode = container.IpcMode("container:" + id) return config, nil }
// modifyNamespaceOptions applies namespaceoptions to dockercontainer.HostConfig. func modifyNamespaceOptions(nsOpts *runtimeapi.NamespaceOption, sandboxID string, hostConfig *dockercontainer.HostConfig) { hostNetwork := false if nsOpts != nil { if nsOpts.HostNetwork != nil { hostNetwork = nsOpts.GetHostNetwork() } if nsOpts.GetHostPid() { hostConfig.PidMode = namespaceModeHost } if nsOpts.GetHostIpc() { hostConfig.IpcMode = namespaceModeHost } } // Set for sandbox if sandboxID is not provided. if sandboxID == "" { modifyHostNetworkOptionForSandbox(hostNetwork, hostConfig) } else { // Set for container if sandboxID is provided. modifyHostNetworkOptionForContainer(hostNetwork, sandboxID, hostConfig) } }