MCPcopy
hub / github.com/docker/compose / defaultNetworkSettings

Function defaultNetworkSettings

pkg/compose/create.go:521–590  ·  view source on GitHub ↗

defaultNetworkSettings determines the container.NetworkMode and corresponding network.NetworkingConfig (nil if not applicable).

(project *types.Project,
	service types.ServiceConfig, serviceIndex int,
	links []string, useNetworkAliases bool,
	version string,
)

Source from the content-addressed store, hash-verified

519
520// defaultNetworkSettings determines the container.NetworkMode and corresponding network.NetworkingConfig (nil if not applicable).
521func defaultNetworkSettings(project *types.Project,
522 service types.ServiceConfig, serviceIndex int,
523 links []string, useNetworkAliases bool,
524 version string,
525) (container.NetworkMode, *network.NetworkingConfig, error) {
526 if service.NetworkMode != "" {
527 return container.NetworkMode(service.NetworkMode), nil, nil
528 }
529
530 if len(project.Networks) == 0 {
531 return network.NetworkNone, nil, nil
532 }
533
534 if versions.LessThan(version, apiVersion149) {
535 for _, config := range service.Networks {
536 if config != nil && config.InterfaceName != "" {
537 return "", nil, fmt.Errorf("interface_name requires Docker Engine %s or later", DockerEngineV28_1)
538 }
539 }
540 }
541
542 serviceNetworks := service.NetworksByPriority()
543 primaryNetworkKey := "default"
544 if len(serviceNetworks) > 0 {
545 primaryNetworkKey = serviceNetworks[0]
546 serviceNetworks = serviceNetworks[1:]
547 }
548
549 primaryNetworkEndpoint, err := createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases)
550 if err != nil {
551 return "", nil, err
552 }
553 if primaryNetworkEndpoint.MacAddress.String() == "" {
554 primaryNetworkEndpoint.MacAddress, err = parseMACAddr(service.MacAddress)
555 if err != nil {
556 return "", nil, err
557 }
558 }
559
560 primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name
561 endpointsConfig := map[string]*network.EndpointSettings{
562 primaryNetworkMobyNetworkName: primaryNetworkEndpoint,
563 }
564
565 // Starting from API version 1.44, the Engine will take several EndpointsConfigs
566 // so we can pass all the extra networks we want the container to be connected to
567 // in the network configuration instead of connecting the container to each extra
568 // network individually after creation.
569 // For older API versions, extra networks are connected via NetworkConnect after
570 // container creation (see createMobyContainer in convergence.go).
571 if !versions.LessThan(version, apiVersion144) {
572 for _, networkKey := range serviceNetworks {
573 epSettings, err := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases)
574 if err != nil {
575 return "", nil, err
576 }
577 mobyNetworkName := project.Networks[networkKey].Name
578 endpointsConfig[mobyNetworkName] = epSettings

Callers 3

getCreateConfigsMethod · 0.85

Calls 3

createEndpointSettingsFunction · 0.85
parseMACAddrFunction · 0.85
StringMethod · 0.45

Tested by 1