From fefdc95224bc8354583c6f277600b6eb74e9b721 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 4 Feb 2026 17:36:11 +0100 Subject: [PATCH] pkg/compose: defaultNetworkSettings: slight refactor - use an intermediate serviceNetworks slice so that we don't have to call service.NetworksByPriority multiple times. - shift the primary network from the slice (if any), so that we can drop some checks for "additional networks" - group code related to setting up the primary network as first step, then append remaining networks. Signed-off-by: Sebastiaan van Stijn --- pkg/compose/create.go | 51 +++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 8c738eabe..58305ef69 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -525,7 +525,7 @@ func defaultNetworkSettings(project *types.Project, } if len(project.Networks) == 0 { - return "none", nil, nil + return network.NetworkNone, nil, nil } if versions.LessThan(version, APIVersion149) { @@ -536,35 +536,17 @@ func defaultNetworkSettings(project *types.Project, } } - var primaryNetworkKey string - if len(service.Networks) > 0 { - primaryNetworkKey = service.NetworksByPriority()[0] - } else { - primaryNetworkKey = "default" + serviceNetworks := service.NetworksByPriority() + primaryNetworkKey := "default" + if len(serviceNetworks) > 0 { + primaryNetworkKey = serviceNetworks[0] + serviceNetworks = serviceNetworks[1:] } - primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name + primaryNetworkEndpoint, err := createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases) if err != nil { return "", nil, err } - - endpointsConfig := map[string]*network.EndpointSettings{} - - // Starting from API version 1.44, the Engine will take several EndpointsConfigs - // so we can pass all the extra networks we want the container to be connected to - // in the network configuration instead of connecting the container to each extra - // network individually after creation. - if len(service.Networks) > 1 { - serviceNetworks := service.NetworksByPriority() - for _, networkKey := range serviceNetworks[1:] { - mobyNetworkName := project.Networks[networkKey].Name - epSettings, err := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases) - if err != nil { - return "", nil, err - } - endpointsConfig[mobyNetworkName] = epSettings - } - } if primaryNetworkEndpoint.MacAddress.String() == "" { primaryNetworkEndpoint.MacAddress, err = parseMACAddr(service.MacAddress) if err != nil { @@ -572,7 +554,24 @@ func defaultNetworkSettings(project *types.Project, } } - endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint + primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name + endpointsConfig := map[string]*network.EndpointSettings{ + primaryNetworkMobyNetworkName: primaryNetworkEndpoint, + } + + // Starting from API version 1.44, the Engine will take several EndpointsConfigs + // so we can pass all the extra networks we want the container to be connected to + // in the network configuration instead of connecting the container to each extra + // network individually after creation. + for _, networkKey := range serviceNetworks { + epSettings, err := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases) + if err != nil { + return "", nil, err + } + mobyNetworkName := project.Networks[networkKey].Name + endpointsConfig[mobyNetworkName] = epSettings + } + networkConfig := &network.NetworkingConfig{ EndpointsConfig: endpointsConfig, }