diff --git a/pkg/compose/convergence.go b/pkg/compose/convergence.go index 99b68efe..5565ab0e 100644 --- a/pkg/compose/convergence.go +++ b/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,