| package images // import "github.com/docker/docker/daemon/images" |
| |
| import ( |
| "context" |
| |
| imagetypes "github.com/docker/docker/api/types/image" |
| "github.com/docker/docker/builder" |
| "github.com/docker/docker/image/cache" |
| "github.com/pkg/errors" |
| "github.com/sirupsen/logrus" |
| ) |
| |
| // MakeImageCache creates a stateful image cache. |
| func (i *ImageService) MakeImageCache(ctx context.Context, sourceRefs []string) (builder.ImageCache, error) { |
| if len(sourceRefs) == 0 { |
| return cache.NewLocal(i.imageStore), nil |
| } |
| |
| cache := cache.New(i.imageStore) |
| |
| for _, ref := range sourceRefs { |
| img, err := i.GetImage(ctx, ref, imagetypes.GetImageOpts{}) |
| if err != nil { |
| if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { |
| return nil, err |
| } |
| logrus.Warnf("Could not look up %s for cache resolution, skipping: %+v", ref, err) |
| continue |
| } |
| cache.Populate(img) |
| } |
| |
| return cache, nil |
| } |