From 50aa9750eed123a3046d32104c24527b4596969e Mon Sep 17 00:00:00 2001 From: Guillaume Lours Date: Mon, 11 Jul 2022 12:15:56 +0200 Subject: [PATCH] check the exact network's name before creating or stopping it NetworkList API doesn't return the extact name match, so we can retrieve more than one network with a request Signed-off-by: Guillaume Lours --- pkg/compose/create.go | 9 ++++++++- pkg/compose/down.go | 14 ++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 34e728eb..8069520a 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -1041,7 +1041,14 @@ func (s *composeService) ensureNetwork(ctx context.Context, n types.NetworkConfi if err != nil { return err } - if len(networks) == 0 { + networkNotFound := true + for _, net := range networks { + if net.Name == n.Name { + networkNotFound = false + break + } + } + if networkNotFound { if n.External.External { if n.Driver == "overlay" { // Swarm nodes do not register overlay networks that were diff --git a/pkg/compose/down.go b/pkg/compose/down.go index b04ac108..1ea7b4dc 100644 --- a/pkg/compose/down.go +++ b/pkg/compose/down.go @@ -163,14 +163,16 @@ func (s *composeService) removeNetwork(ctx context.Context, name string, w progr var removed int for _, net := range networks { - if err := s.apiClient().NetworkRemove(ctx, net.ID); err != nil { - if errdefs.IsNotFound(err) { - continue + if net.Name == name { + if err := s.apiClient().NetworkRemove(ctx, net.ID); err != nil { + if errdefs.IsNotFound(err) { + continue + } + w.Event(progress.ErrorEvent(eventName)) + return errors.Wrapf(err, fmt.Sprintf("failed to remove network %s", name)) } - w.Event(progress.ErrorEvent(eventName)) - return errors.Wrapf(err, fmt.Sprintf("failed to remove network %s", name)) + removed++ } - removed++ } if removed == 0 {