{"record":{"id":"d9329aa3c4cbc1f6","repo":"GoogleContainerTools/skaffold","slug":"cleaning-up-debug-support-volume","errorCode":null,"errorMessage":"cleaning up debug support volume","messagePattern":"cleaning up debug support volume","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"pkg/skaffold/deploy/docker/deploy.go","lineNumber":373,"sourceCode":"\nfunc (d *Deployer) Cleanup(ctx context.Context, out io.Writer, dryRun bool, _ manifest.ManifestListByConfig) error {\n\tif dryRun {\n\t\tfor _, container := range d.tracker.DeployedContainers() {\n\t\t\toutput.Yellow.Fprintln(out, container.ID)\n\t\t}\n\t\treturn nil\n\t}\n\tfor _, container := range d.tracker.DeployedContainers() {\n\t\tif err := d.client.Delete(ctx, out, container.ID); err != nil {\n\t\t\t// TODO(nkubala): replace with actionable error\n\t\t\treturn errors.Wrap(err, \"cleaning up deployed container\")\n\t\t}\n\t\td.portManager.RelinquishPorts(container.ID)\n\t}\n\n\tfor _, m := range d.debugger.SupportMounts() {\n\t\tif err := d.client.VolumeRemove(ctx, m.Source); err != nil {\n\t\t\treturn errors.Wrap(err, \"cleaning up debug support volume\")\n\t\t}\n\t}\n\n\tif err := d.client.NetworkRemove(ctx, d.network); d.networkDeployed && err != nil {\n\t\treturn errors.Wrap(err, \"cleaning up skaffold created network\")\n\t}\n\n\treturn d.cleanPreviousDeployments(ctx)\n}\n\nfunc (d *Deployer) cleanPreviousDeployments(ctx context.Context) error {\n\tctd, err := d.containersToDelete(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tntd, err := d.networksToDelete(ctx, ctd)\n\tif err != nil {","sourceCodeStart":355,"sourceCodeEnd":391,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/deploy/docker/deploy.go#L355-L391","documentation":"Cleanup removes the debug support volumes created for init containers via d.client.VolumeRemove for each mount in d.debugger.SupportMounts(). Failure to remove a volume (in use, not found, daemon error) is wrapped with this message.","triggerScenarios":"Deployer.Cleanup calls d.client.VolumeRemove(ctx, m.Source) for each support mount; the daemon refuses because a container still uses the volume, the volume was already removed, or the daemon is unreachable.","commonSituations":"Volume still attached because a previous container-delete step failed or was skipped; volume removed manually with `docker volume rm`; leftover volume mounted by a container created outside skaffold; daemon shut down mid-cleanup.","solutions":["Remove the using container first, then `docker volume rm <volume>` manually","Re-run `skaffold delete` after the container cleanup step succeeds","List and delete orphaned volumes: `docker volume ls --filter label=<skaffold-label>` then `docker volume prune`","If the volume is already gone (404/no such volume), it's safe to ignore and continue","Check the wrapped inner error to distinguish 'in use' vs 'not found'"],"exampleFix":"// before\nerror: cleaning up debug support volume: volume in use\n// after\n$ docker ps -a --filter volume=<volume-name> -q | xargs docker rm -f\n$ docker volume rm <volume-name>\n$ skaffold delete","handlingStrategy":"try-catch","validationCode":"if out, err := exec.Command(\"sh\", \"-c\", \"docker volume ls -q --filter label=<skaffold-label>\").CombinedOutput(); err == nil && len(out) > 0 {\n  log.Printf(\"support volumes pending cleanup: %s\", out)\n}","typeGuard":"null","tryCatchPattern":"if err := deployer.Cleanup(ctx, out); err != nil && strings.Contains(err.Error(), \"cleaning up debug support volume\") {\n  exec.Command(\"sh\", \"-c\", \"docker volume prune -f\").Run()\n  log.Printf(\"volume cleanup failed (%v); pruned manually\", err)\n}","preventionTips":["Ensure container cleanup succeeds before volumes are removed (fix container errors first)","Periodically run `docker volume prune`","Avoid external processes mounting skaffold-created volumes","Re-run `skaffold delete` when volumes are reported in use"],"tags":["docker","cleanup","volume"],"backgroundTag":"volume-in-use","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}