diff --git a/daemon/daemon.go b/daemon/daemon.go index 43b7731a3e..0b636aa3ee 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -922,6 +922,10 @@ func NewDaemon(config *config.Config, registryService registry.Service, containe return d, nil } +func (daemon *Daemon) DistributionServices() images.DistributionServices { + return daemon.imageService.DistributionServices() +} + func (daemon *Daemon) waitForStartupDone() { <-daemon.startupDone } diff --git a/daemon/images/service.go b/daemon/images/service.go index 4af48959bf..6842760359 100644 --- a/daemon/images/service.go +++ b/daemon/images/service.go @@ -3,9 +3,11 @@ package images // import "github.com/docker/docker/daemon/images" import ( "context" "os" + "runtime" "github.com/docker/docker/container" daemonevents "github.com/docker/docker/daemon/events" + "github.com/docker/docker/distribution" "github.com/docker/docker/distribution/metadata" "github.com/docker/docker/distribution/xfer" "github.com/docker/docker/image" @@ -74,6 +76,24 @@ type ImageService struct { uploadManager *xfer.LayerUploadManager } +type DistributionServices struct { + DownloadManager distribution.RootFSDownloadManager + V2MetadataService metadata.V2MetadataService + LayerStore layer.Store // TODO: lcow + ImageStore image.Store + ReferenceStore dockerreference.Store +} + +func (i *ImageService) DistributionServices() DistributionServices { + return DistributionServices{ + DownloadManager: i.downloadManager, + V2MetadataService: metadata.NewV2MetadataService(i.distributionMetadataStore), + LayerStore: i.layerStores[runtime.GOOS], + ImageStore: i.imageStore, + ReferenceStore: i.referenceStore, + } +} + // CountImages returns the number of images stored by ImageService // called from info.go func (i *ImageService) CountImages() int { diff --git a/layer/layer_store.go b/layer/layer_store.go index bf0705afc5..c1fbf85091 100644 --- a/layer/layer_store.go +++ b/layer/layer_store.go @@ -121,6 +121,10 @@ func newStoreFromGraphDriver(root string, driver graphdriver.Driver, os string) return ls, nil } +func (ls *layerStore) Driver() graphdriver.Driver { + return ls.driver +} + func (ls *layerStore) loadLayer(layer ChainID) (*roLayer, error) { cl, ok := ls.layerMap[layer] if ok { diff --git a/layer/ro_layer.go b/layer/ro_layer.go index bc0fe1dddf..3555e8b027 100644 --- a/layer/ro_layer.go +++ b/layer/ro_layer.go @@ -54,6 +54,10 @@ func (rl *roLayer) TarStreamFrom(parent ChainID) (io.ReadCloser, error) { return rl.layerStore.driver.Diff(rl.cacheID, parentCacheID) } +func (rl *roLayer) CacheID() string { + return rl.cacheID +} + func (rl *roLayer) ChainID() ChainID { return rl.chainID }