diff --git a/pkg/drivers/kic/oci/network.go b/pkg/drivers/kic/oci/network.go index dc905a277797..a06e25de578d 100644 --- a/pkg/drivers/kic/oci/network.go +++ b/pkg/drivers/kic/oci/network.go @@ -58,9 +58,20 @@ func digDNS(ociBin, containerName, dns string) (net.IP, error) { return ip, nil } +// profileInContainers checks whether the profile is withing the containers list +func profileInContainers(profile string, containers []string) bool { + for _, container := range containers { + if container == profile { + return true + } + } + return false +} + // dockerGatewayIP gets the default gateway ip for the docker bridge on the user's host machine // gets the ip from user's host docker func dockerGatewayIP(profile string) (net.IP, error) { + var bridgeID string // check if using custom network first if networkExists(profile) { ip := net.ParseIP(DefaultGateway) @@ -70,8 +81,28 @@ func dockerGatewayIP(profile string) (net.IP, error) { if err != nil { return nil, errors.Wrapf(err, "get network bridge") } - - bridgeID := strings.TrimSpace(rr.Stdout.String()) + networksOutput := strings.TrimSpace(rr.Stdout.String()) + networksSlice := strings.Fields(networksOutput) + if len(networksSlice) == 1 { + bridgeID = networksOutput + } else { + // Look for the minikube container within each docker network + for _, net := range networksSlice { + // get all containers in the network + rs, err := runCmd(exec.Command(Docker, "network", "inspect", net, "-f", "'{{range $k, $v := .Containers}}{{$v.Name}} {{end}}'")) + if err != nil { + return nil, errors.Wrapf(err, "get containers in network") + } + containersSlice := strings.Fields(rs.Stdout.String()) + if profileInContainers(profile, containersSlice){ + bridgeID = net + break + } + } + } + if bridgeID == "" { + return nil, errors.Errorf("Error finding docker network") + } rr, err = runCmd(exec.Command(Docker, "network", "inspect", "--format", "{{(index .IPAM.Config 0).Gateway}}", bridgeID)) if err != nil {