diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 2b229aa17a..58305ef69b 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -525,54 +525,53 @@ func defaultNetworkSettings(project *types.Project, } if len(project.Networks) == 0 { - return "none", nil, nil + return network.NetworkNone, nil, nil } - var primaryNetworkKey string - if len(service.Networks) > 0 { - primaryNetworkKey = service.NetworksByPriority()[0] - } else { - primaryNetworkKey = "default" + 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) + } + } } - primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name + + serviceNetworks := service.NetworksByPriority() + primaryNetworkKey := "default" + if len(serviceNetworks) > 0 { + primaryNetworkKey = serviceNetworks[0] + serviceNetworks = serviceNetworks[1:] + } + 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 } - 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, }