{"record":{"id":"1642acf67aaa5d82","repo":"docker/compose","slug":"failed-to-list-networks-w","errorCode":null,"errorMessage":"failed to list networks: %w","messagePattern":"failed to list networks: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/compose/down.go","lineNumber":195,"sourceCode":"\t\tif n.External {\n\t\t\tcontinue\n\t\t}\n\t\t// loop capture variable for op closure\n\t\tnetworkKey := key\n\t\tidOrName := n.Name\n\t\tops = append(ops, func() error {\n\t\t\treturn s.removeNetwork(ctx, networkKey, project.Name, idOrName)\n\t\t})\n\t}\n\treturn ops\n}\n\nfunc (s *composeService) removeNetwork(ctx context.Context, composeNetworkName string, projectName string, name string) error {\n\tres, err := s.apiClient().NetworkList(ctx, client.NetworkListOptions{\n\t\tFilters: projectFilter(projectName).Add(\"label\", networkFilter(composeNetworkName)),\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to list networks: %w\", err)\n\t}\n\tnetworks := res.Items\n\n\tif len(networks) == 0 {\n\t\treturn nil\n\t}\n\n\teventName := fmt.Sprintf(\"Network %s\", name)\n\ts.events.On(removingEvent(eventName))\n\n\tvar found int\n\tfor _, net := range networks {\n\t\tif net.Name != name {\n\t\t\tcontinue\n\t\t}\n\t\tnwInspect, err := s.apiClient().NetworkInspect(ctx, net.ID, client.NetworkInspectOptions{})\n\t\tif errdefs.IsNotFound(err) {\n\t\t\ts.events.On(newEvent(eventName, api.Warning, \"No resource found to remove\"))","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/docker/compose/blob/ddc4b044b62e9f715212ea4143fa830fac76382f/pkg/compose/down.go#L177-L213","documentation":"During 'docker compose down', the preliminary NetworkList call (filtered by project label and network name) failed at the API level. It is a wrapper — the underlying client/transport error (connection refused, timeout, permissions) tells the real story; no networks are removed when this fires.","triggerScenarios":"removeNetwork -> apiClient().NetworkList erroring: daemon stopped mid-down, DOCKER_HOST unreachable, TLS/auth failure to remote engine, or request timeout during teardown ops.","commonSituations":"Running 'down' after the daemon crashed or was restarted; VPN/SSH tunnel for remote docker dropped; slow daemon under load timing out.","solutions":["Check daemon health: docker info; restart if needed","Verify DOCKER_HOST/context still reachable","Retry docker compose down once connectivity is back (down is idempotent)","Increase client timeouts for slow remote engines"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// connectivity pre-check before teardown\nif _, err := cli.Info(ctx); err != nil {\n    return fmt.Errorf(\"daemon unreachable, aborting down: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"// down is idempotent: retry on transient transport failures\nfor i := 0; i < 3; i++ {\n    err := compose.Down(ctx, api.DownOptions{Project: p})\n    if err == nil || !errdefs.IsUnavailable(err) && !errdefs.IsSystem(err) { break }\n    time.Sleep(time.Duration(i+1) * time.Second)\n}","preventionTips":["Check docker info before scripted teardown","Keep remote engine tunnels alive during long operations","Make cleanup scripts idempotent and re-runnable"],"tags":["network","docker-api","teardown","retryable"],"backgroundTag":null,"analyzedSha":"ddc4b044b62e9f715212ea4143fa830fac76382f","analyzedAt":"2026-08-15T13:31:42.319Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}