diff --git a/daemon/container_operations.go b/daemon/container_operations.go index faab3dbd97..22c55a6eeb 100644 --- a/daemon/container_operations.go +++ b/daemon/container_operations.go @@ -356,8 +356,7 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN n, err := daemon.FindNetwork(id) if err != nil { - // We should always be able to find the network for a - // managed container. + // We should always be able to find the network for a managed container. if container.Managed { return nil, nil, err } @@ -385,22 +384,18 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN if epConfig.IPAMConfig.IPv4Address != "" { addresses = append(addresses, epConfig.IPAMConfig.IPv4Address) } - if epConfig.IPAMConfig.IPv6Address != "" { addresses = append(addresses, epConfig.IPAMConfig.IPv6Address) } } - var ( - nwCfg *networktypes.NetworkingConfig - retryCount int - ) - if n == nil && daemon.attachableNetworkLock != nil { daemon.attachableNetworkLock.Lock(id) defer daemon.attachableNetworkLock.Unlock(id) } + retryCount := 0 + var nwCfg *networktypes.NetworkingConfig for { // In all other cases, attempt to attach to the network to // trigger attachment in the swarm cluster manager. @@ -526,13 +521,10 @@ func (daemon *Daemon) allocateNetwork(cfg *config.Config, container *container.C return nil } - var ( - start = time.Now() - controller = daemon.netController - ) + start := time.Now() // Cleanup any stale sandbox left over due to ungraceful daemon shutdown - if err := controller.SandboxDestroy(container.ID); err != nil { + if err := daemon.netController.SandboxDestroy(container.ID); err != nil { log.G(context.TODO()).WithError(err).Errorf("failed to cleanup up stale network sandbox for container %s", container.ID) } @@ -541,7 +533,6 @@ func (daemon *Daemon) allocateNetwork(cfg *config.Config, container *container.C } updateSettings := false - if len(container.NetworkSettings.Networks) == 0 { daemon.updateContainerNetworkSettings(container, nil) updateSettings = true @@ -728,8 +719,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container. if container.HostConfig.NetworkMode.IsContainer() { return runconfig.ErrConflictSharedNetwork } - if containertypes.NetworkMode(idOrName).IsBridge() && - cfg.DisableBridge { + if cfg.DisableBridge && containertypes.NetworkMode(idOrName).IsBridge() { container.Config.NetworkDisabled = true return nil } @@ -744,14 +734,12 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container. if n == nil { return nil } + nwName := n.Name() var operIPAM bool if nwCfg != nil { - if epConfig, ok := nwCfg.EndpointsConfig[n.Name()]; ok { - if endpointConfig.IPAMConfig == nil || - (endpointConfig.IPAMConfig.IPv4Address == "" && - endpointConfig.IPAMConfig.IPv6Address == "" && - len(endpointConfig.IPAMConfig.LinkLocalIPs) == 0) { + if epConfig, ok := nwCfg.EndpointsConfig[nwName]; ok { + if endpointConfig.IPAMConfig == nil || (endpointConfig.IPAMConfig.IPv4Address == "" && endpointConfig.IPAMConfig.IPv6Address == "" && len(endpointConfig.IPAMConfig.LinkLocalIPs) == 0) { operIPAM = true } @@ -765,7 +753,6 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container. return err } - controller := daemon.netController sb := daemon.getNetworkSandbox(container) createOptions, err := buildCreateEndpointOptions(container, n, endpointConfig, sb, cfg.DNS) if err != nil { @@ -784,7 +771,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container. } } }() - container.NetworkSettings.Networks[n.Name()] = &network.EndpointSettings{ + container.NetworkSettings.Networks[nwName] = &network.EndpointSettings{ EndpointSettings: endpointConfig, IPAMOperational: operIPAM, } @@ -800,7 +787,7 @@ func (daemon *Daemon) connectToNetwork(cfg *config.Config, container *container. if err != nil { return err } - sb, err = controller.NewSandbox(container.ID, sbOptions...) + sb, err = daemon.netController.NewSandbox(container.ID, sbOptions...) if err != nil { return err } @@ -885,8 +872,7 @@ func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *l ep *libnetwork.Endpoint sbox *libnetwork.Sandbox ) - - s := func(current *libnetwork.Endpoint) bool { + n.WalkEndpoints(func(current *libnetwork.Endpoint) bool { epInfo := current.Info() if epInfo == nil { return false @@ -899,19 +885,17 @@ func (daemon *Daemon) disconnectFromNetwork(container *container.Container, n *l } } return false - } - n.WalkEndpoints(s) - - if ep == nil && force { - epName := strings.TrimPrefix(container.Name, "/") - ep, err := n.EndpointByName(epName) - if err != nil { - return err - } - return ep.Delete(force) - } + }) if ep == nil { + if force { + var err error + ep, err = n.EndpointByName(strings.TrimPrefix(container.Name, "/")) + if err != nil { + return err + } + return ep.Delete(force) + } return fmt.Errorf("container %s is not connected to network %s", container.ID, n.Name()) } @@ -1005,16 +989,14 @@ func (daemon *Daemon) releaseNetwork(container *container.Container) { return } - sid := container.NetworkSettings.SandboxID - settings := container.NetworkSettings.Networks container.NetworkSettings.Ports = nil - + sid := container.NetworkSettings.SandboxID if sid == "" { return } var networks []*libnetwork.Network - for n, epSettings := range settings { + for n, epSettings := range container.NetworkSettings.Networks { if nw, err := daemon.FindNetwork(getNetworkID(n, epSettings.EndpointSettings)); err == nil { networks = append(networks, nw) }