From 0408d3ba1a8250c928d19b98d4a85a9f34b8b3b8 Mon Sep 17 00:00:00 2001 From: Pablo Caderno Date: Sat, 22 Aug 2020 17:22:02 +1000 Subject: [PATCH] Added code to inspect docker networks to get the bridgeID correctly Signed-off-by: Pablo Caderno --- pkg/drivers/kic/oci/network.go | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/pkg/drivers/kic/oci/network.go b/pkg/drivers/kic/oci/network.go index dc905a277..d41e8729f 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 within 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,25 @@ func dockerGatewayIP(profile string) (net.IP, error) { if err != nil { return nil, errors.Wrapf(err, "get network bridge") } + networksOutput := strings.TrimSpace(rr.Stdout.String()) + networksSlice := strings.Fields(networksOutput) + // 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 + } + } - bridgeID := strings.TrimSpace(rr.Stdout.String()) + if bridgeID == "" { + return nil, errors.Errorf("unable to determine bridge network id from %q", networksOutput) + } rr, err = runCmd(exec.Command(Docker, "network", "inspect", "--format", "{{(index .IPAM.Config 0).Gateway}}", bridgeID)) if err != nil { -- GitLab