From f4706214ea399e56695878be37f534eb3bb89381 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 4 Feb 2026 17:22:33 +0100 Subject: [PATCH 1/2] pkg/compose: defaultNetworkSettings: return early for unsupported feature Signed-off-by: Sebastiaan van Stijn --- pkg/compose/create.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 2b229aa17a..8c738eabed 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -528,6 +528,14 @@ func defaultNetworkSettings(project *types.Project, return "none", nil, nil } + if versions.LessThan(version, APIVersion149) { + for _, config := range service.Networks { + if config != nil && config.InterfaceName != "" { + return "", nil, fmt.Errorf("interface_name requires Docker Engine %s or later", DockerEngineV28_1) + } + } + } + var primaryNetworkKey string if len(service.Networks) > 0 { primaryNetworkKey = service.NetworksByPriority()[0] @@ -564,14 +572,6 @@ func defaultNetworkSettings(project *types.Project, } } - if versions.LessThan(version, APIVersion149) { - for _, config := range service.Networks { - if config != nil && config.InterfaceName != "" { - return "", nil, fmt.Errorf("interface_name requires Docker Engine %s or later", DockerEngineV28_1) - } - } - } - endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint networkConfig := &network.NetworkingConfig{ EndpointsConfig: endpointsConfig, From 28a46aa3c5e747e7d450a5c462f8233632ce1a31 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 4 Feb 2026 17:36:11 +0100 Subject: [PATCH 2/2] 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 | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 8c738eabed..58305ef69b 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,43 +536,42 @@ 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 } + if primaryNetworkEndpoint.MacAddress.String() == "" { + primaryNetworkEndpoint.MacAddress, err = parseMACAddr(service.MacAddress) + if err != nil { + return "", nil, err + } + } - endpointsConfig := map[string]*network.EndpointSettings{} + 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. - 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) + 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 } - endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint networkConfig := &network.NetworkingConfig{ EndpointsConfig: endpointsConfig, }