func filterContainersByMyNetworks()

in local-container-endpoints/handlers/metadata.go [309:349]


func filterContainersByMyNetworks(filteredContainerList []types.Container, allContainers []types.Container, callerIP string) []types.Container {
	// find endpoints containers
	var endpointContainer *types.Container
	shortID := os.Getenv("HOSTNAME")
	for _, container := range allContainers {
		if strings.HasPrefix(container.ID, shortID) {
			endpointContainer = &container
		}
	}

	if endpointContainer == nil || endpointContainer.NetworkSettings == nil {
		logrus.Warn("Failed to find endpoints container among running containers")
		// Return the list we were given, since we can't filter it any further
		return filteredContainerList
	}

	var finalList []types.Container

	// containers can only make request to the endpoint container from within one of its networks
	var networksToSearch []string
	for network, settings := range endpointContainer.NetworkSettings.Networks {
		networksToSearch = append(networksToSearch, network)
		if settings != nil {
			networksToSearch = append(networksToSearch, settings.Aliases...)
		}
	}

	for _, container := range filteredContainerList {
		if container.NetworkSettings == nil {
			continue
		}
		for network, settings := range container.NetworkSettings.Networks {
			if settings != nil && networkMatches(network, settings.Aliases, networksToSearch) && settings.IPAddress == callerIP {
				// This container is in one of the right networks and has the caller IP in that network
				finalList = append(finalList, container)
			}
		}
	}

	return finalList
}