12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package daemon
- import (
- "time"
- "github.com/docker/distribution/reference"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/layer"
- "github.com/pkg/errors"
- )
- // 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, errors.Wrapf(err, "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, reference.FamiliarString(ref))
- case reference.Canonical:
- repoDigests = append(repoDigests, reference.FamiliarString(ref))
- }
- }
- 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
- }
|