c8d/prune: Exclude dangling tag of the images used by containers
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
parent
a6d5db3f9b
commit
a93298d4db
2 changed files with 36 additions and 0 deletions
|
@ -95,6 +95,9 @@ func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFu
|
|||
var errs error
|
||||
// Exclude images used by existing containers
|
||||
for _, ctr := range containers {
|
||||
// If the original image was deleted, make sure we don't delete the dangling image
|
||||
delete(imagesToPrune, danglingImageName(ctr.ImageID.Digest()))
|
||||
|
||||
// Config.Image is the image reference passed by user.
|
||||
// For example: container created by `docker run alpine` will have Image="alpine"
|
||||
// Warning: This doesn't handle truncated ids:
|
||||
|
|
33
integration/image/prune_test.go
Normal file
33
integration/image/prune_test.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
package image
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/api/types/filters"
|
||||
"github.com/docker/docker/integration/internal/container"
|
||||
"github.com/docker/docker/testutil/environment"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
// Regression test for: https://github.com/moby/moby/issues/45732
|
||||
func TestPruneDontDeleteUsedDangling(t *testing.T) {
|
||||
skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME: hack/make/.build-empty-images doesn't run on Windows")
|
||||
|
||||
defer setupTest(t)()
|
||||
client := testEnv.APIClient()
|
||||
ctx := context.Background()
|
||||
|
||||
danglingID := environment.GetTestDanglingImageId(testEnv)
|
||||
|
||||
container.Create(ctx, t, client,
|
||||
container.WithImage(danglingID),
|
||||
container.WithCmd("sleep", "60"))
|
||||
|
||||
pruned, err := client.ImagesPrune(ctx, filters.NewArgs(filters.Arg("dangling", "true")))
|
||||
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.Len(pruned.ImagesDeleted, 0))
|
||||
}
|
Loading…
Reference in a new issue