@@ -181,29 +181,43 @@ func (s *composeService) removeNetwork(ctx context.Context, name string, w progr
181
181
eventName := fmt .Sprintf ("Network %s" , name )
182
182
w .Event (progress .RemovingEvent (eventName ))
183
183
184
- var removed int
184
+ var found int
185
185
for _ , net := range networks {
186
- if net .Name == name {
187
- if err := s .apiClient ().NetworkRemove (ctx , net .ID ); err != nil {
188
- if errdefs .IsNotFound (err ) {
189
- continue
190
- }
191
- w .Event (progress .ErrorEvent (eventName ))
192
- return errors .Wrapf (err , fmt .Sprintf ("failed to remove network %s" , name ))
186
+ if net .Name != name {
187
+ continue
188
+ }
189
+ network , err := s .apiClient ().NetworkInspect (ctx , net .ID , moby.NetworkInspectOptions {})
190
+ if errdefs .IsNotFound (err ) {
191
+ w .Event (progress .NewEvent (eventName , progress .Warning , "No resource found to remove" ))
192
+ return nil
193
+ }
194
+ if err != nil {
195
+ return err
196
+ }
197
+ if len (network .Containers ) > 0 {
198
+ w .Event (progress .NewEvent (eventName , progress .Warning , "Resource is still in use" ))
199
+ found ++
200
+ continue
201
+ }
202
+
203
+ if err := s .apiClient ().NetworkRemove (ctx , net .ID ); err != nil {
204
+ if errdefs .IsNotFound (err ) {
205
+ continue
193
206
}
194
- removed ++
207
+ w .Event (progress .ErrorEvent (eventName ))
208
+ return errors .Wrapf (err , fmt .Sprintf ("failed to remove network %s" , name ))
195
209
}
210
+ w .Event (progress .RemovedEvent (eventName ))
211
+ found ++
196
212
}
197
213
198
- if removed == 0 {
214
+ if found == 0 {
199
215
// in practice, it's extremely unlikely for this to ever occur, as it'd
200
216
// mean the network was present when we queried at the start of this
201
217
// method but was then deleted by something else in the interim
202
- w .Event (progress .NewEvent (eventName , progress .Done , "Warning: No resource found to remove" ))
218
+ w .Event (progress .NewEvent (eventName , progress .Warning , "No resource found to remove" ))
203
219
return nil
204
220
}
205
-
206
- w .Event (progress .RemovedEvent (eventName ))
207
221
return nil
208
222
}
209
223
0 commit comments