mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package daemon
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/docker/docker/api/types"
 | 
						|
	"github.com/docker/docker/layer"
 | 
						|
	"github.com/docker/docker/reference"
 | 
						|
)
 | 
						|
 | 
						|
// LookupImage looks up an image by name and returns it as an ImageInspect
 | 
						|
// structure.
 | 
						|
func (daemon *Daemon) LookupImage(name string) (*types.ImageInspect, error) {
 | 
						|
	img, err := daemon.GetImage(name)
 | 
						|
	if err != nil {
 | 
						|
		return nil, fmt.Errorf("No such image: %s", name)
 | 
						|
	}
 | 
						|
 | 
						|
	refs := daemon.referenceStore.References(img.ID().Digest())
 | 
						|
	repoTags := []string{}
 | 
						|
	repoDigests := []string{}
 | 
						|
	for _, ref := range refs {
 | 
						|
		switch ref.(type) {
 | 
						|
		case reference.NamedTagged:
 | 
						|
			repoTags = append(repoTags, ref.String())
 | 
						|
		case reference.Canonical:
 | 
						|
			repoDigests = append(repoDigests, ref.String())
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	var size int64
 | 
						|
	var layerMetadata map[string]string
 | 
						|
	layerID := img.RootFS.ChainID()
 | 
						|
	if layerID != "" {
 | 
						|
		l, err := daemon.layerStore.Get(layerID)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		defer layer.ReleaseAndLog(daemon.layerStore, l)
 | 
						|
		size, err = l.Size()
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
 | 
						|
		layerMetadata, err = l.Metadata()
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	comment := img.Comment
 | 
						|
	if len(comment) == 0 && len(img.History) > 0 {
 | 
						|
		comment = img.History[len(img.History)-1].Comment
 | 
						|
	}
 | 
						|
 | 
						|
	imageInspect := &types.ImageInspect{
 | 
						|
		ID:              img.ID().String(),
 | 
						|
		RepoTags:        repoTags,
 | 
						|
		RepoDigests:     repoDigests,
 | 
						|
		Parent:          img.Parent.String(),
 | 
						|
		Comment:         comment,
 | 
						|
		Created:         img.Created.Format(time.RFC3339Nano),
 | 
						|
		Container:       img.Container,
 | 
						|
		ContainerConfig: &img.ContainerConfig,
 | 
						|
		DockerVersion:   img.DockerVersion,
 | 
						|
		Author:          img.Author,
 | 
						|
		Config:          img.Config,
 | 
						|
		Architecture:    img.Architecture,
 | 
						|
		Os:              img.OS,
 | 
						|
		OsVersion:       img.OSVersion,
 | 
						|
		Size:            size,
 | 
						|
		VirtualSize:     size, // TODO: field unused, deprecate
 | 
						|
		RootFS:          rootFSToAPIType(img.RootFS),
 | 
						|
	}
 | 
						|
 | 
						|
	imageInspect.GraphDriver.Name = daemon.GraphDriverName()
 | 
						|
 | 
						|
	imageInspect.GraphDriver.Data = layerMetadata
 | 
						|
 | 
						|
	return imageInspect, nil
 | 
						|
}
 |