Forráskód Böngészése

only disconnect active networks in a container

Signed-off-by: Lorena Rangel <[email protected]>
Lorena Rangel 4 éve
szülő
commit
b5d3eda223
1 módosított fájl, 29 hozzáadás és 11 törlés
  1. 29 11
      pkg/compose/convergence.go

+ 29 - 11
pkg/compose/convergence.go

@@ -315,13 +315,19 @@ func (s *composeService) createMobyContainer(ctx context.Context, project *types
 	if err != nil {
 		return err
 	}
+	inspectedContainer, err := s.apiClient.ContainerInspect(ctx, created.ID)
+	if err != nil {
+		return err
+	}
 	createdContainer := moby.Container{
-		ID:     created.ID,
-		Labels: containerConfig.Labels,
-		Names:  []string{"/" + name},
+		ID:     inspectedContainer.ID,
+		Labels: inspectedContainer.Config.Labels,
+		Names:  []string{inspectedContainer.Name},
+		NetworkSettings: &moby.SummaryNetworkSettings{
+			Networks: inspectedContainer.NetworkSettings.Networks,
+		},
 	}
 	cState.Add(createdContainer)
-
 	links, err := s.getLinks(ctx, service)
 	if err != nil {
 		return err
@@ -336,7 +342,15 @@ func (s *composeService) createMobyContainer(ctx context.Context, project *types
 				aliases = append(aliases, cfg.Aliases...)
 			}
 		}
-
+		if val, ok := createdContainer.NetworkSettings.Networks[netwrk.Name]; ok {
+			if shortIDAliasExists(createdContainer.ID, val.Aliases...) {
+				continue
+			}
+			err := s.apiClient.NetworkDisconnect(ctx, netwrk.Name, createdContainer.ID, false)
+			if err != nil {
+				return err
+			}
+		}
 		err = s.connectContainerToNetwork(ctx, created.ID, netwrk.Name, cfg, links, aliases...)
 		if err != nil {
 			return err
@@ -345,6 +359,15 @@ func (s *composeService) createMobyContainer(ctx context.Context, project *types
 	return nil
 }
 
+func shortIDAliasExists(containerID string, aliases ...string) bool {
+	for _, alias := range aliases {
+		if alias == containerID[:12] {
+			return true
+		}
+	}
+	return false
+}
+
 func (s *composeService) connectContainerToNetwork(ctx context.Context, id string, netwrk string, cfg *types.ServiceNetworkConfig, links []string, aliases ...string) error {
 	var (
 		ipv4ddress  string
@@ -354,12 +377,7 @@ func (s *composeService) connectContainerToNetwork(ctx context.Context, id strin
 		ipv4ddress = cfg.Ipv4Address
 		ipv6Address = cfg.Ipv6Address
 	}
-	err := s.apiClient.NetworkDisconnect(ctx, netwrk, id, false)
-	if err != nil {
-		return err
-	}
-
-	err = s.apiClient.NetworkConnect(ctx, netwrk, id, &network.EndpointSettings{
+	err := s.apiClient.NetworkConnect(ctx, netwrk, id, &network.EndpointSettings{
 		Aliases:           aliases,
 		IPAddress:         ipv4ddress,
 		GlobalIPv6Address: ipv6Address,