123456789101112131415161718192021222324252627282930313233343536373839 |
- package containerd
- import (
- "context"
- "github.com/containerd/containerd/mount"
- "github.com/containerd/log"
- "github.com/docker/docker/container"
- "github.com/docker/docker/pkg/archive"
- "github.com/docker/docker/pkg/stringid"
- )
- func (i *ImageService) Changes(ctx context.Context, container *container.Container) ([]archive.Change, error) {
- snapshotter := i.client.SnapshotService(container.Driver)
- info, err := snapshotter.Stat(ctx, container.ID)
- if err != nil {
- return nil, err
- }
- id := stringid.GenerateRandomID()
- parentViewKey := container.ID + "-parent-view-" + id
- imageMounts, _ := snapshotter.View(ctx, parentViewKey, info.Parent)
- defer func() {
- if err := snapshotter.Remove(ctx, parentViewKey); err != nil {
- log.G(ctx).WithError(err).Warn("error removing the parent view snapshot")
- }
- }()
- var changes []archive.Change
- err = i.PerformWithBaseFS(ctx, container, func(containerRoot string) error {
- return mount.WithReadonlyTempMount(ctx, imageMounts, func(imageRoot string) error {
- changes, err = archive.ChangesDirs(containerRoot, imageRoot)
- return err
- })
- })
- return changes, err
- }
|