prune_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package image
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/docker/docker/api/types/filters"
  6. "github.com/docker/docker/integration/internal/container"
  7. "github.com/docker/docker/internal/testutils/specialimage"
  8. "github.com/docker/docker/testutil/daemon"
  9. "gotest.tools/v3/assert"
  10. "gotest.tools/v3/skip"
  11. )
  12. // Regression test for: https://github.com/moby/moby/issues/45732
  13. func TestPruneDontDeleteUsedDangling(t *testing.T) {
  14. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot start multiple daemons on windows")
  15. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  16. ctx := setupTest(t)
  17. d := daemon.New(t)
  18. d.Start(t)
  19. defer d.Stop(t)
  20. client := d.NewClientT(t)
  21. defer client.Close()
  22. danglingID := specialimage.Load(ctx, t, client, specialimage.Dangling)
  23. _, _, err := client.ImageInspectWithRaw(ctx, danglingID)
  24. assert.NilError(t, err, "Test dangling image doesn't exist")
  25. container.Create(ctx, t, client,
  26. container.WithImage(danglingID),
  27. container.WithCmd("sleep", "60"))
  28. pruned, err := client.ImagesPrune(ctx, filters.NewArgs(filters.Arg("dangling", "true")))
  29. assert.NilError(t, err)
  30. for _, deleted := range pruned.ImagesDeleted {
  31. if strings.Contains(deleted.Deleted, danglingID) || strings.Contains(deleted.Untagged, danglingID) {
  32. t.Errorf("used dangling image %s shouldn't be deleted", danglingID)
  33. }
  34. }
  35. _, _, err = client.ImageInspectWithRaw(ctx, danglingID)
  36. assert.NilError(t, err, "Test dangling image should still exist")
  37. }