d5baf8dd |
package daemon
import (
"time"
|
3a127939 |
"github.com/docker/distribution/reference" |
91e197d6 |
"github.com/docker/docker/api/types" |
d5baf8dd |
"github.com/docker/docker/layer" |
0cba7740 |
"github.com/docker/docker/pkg/system" |
cc9ed0a3 |
"github.com/pkg/errors" |
d5baf8dd |
)
// 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 { |
cc9ed0a3 |
return nil, errors.Wrapf(err, "no such image: %s", name) |
d5baf8dd |
} |
0cba7740 |
if !system.IsOSSupported(img.OperatingSystem()) {
return nil, system.ErrNotSupportedOperatingSystem
} |
7b9a8f46 |
refs := daemon.referenceStore.References(img.ID().Digest()) |
d5baf8dd |
repoTags := []string{}
repoDigests := []string{}
for _, ref := range refs {
switch ref.(type) {
case reference.NamedTagged: |
3a127939 |
repoTags = append(repoTags, reference.FamiliarString(ref)) |
d5baf8dd |
case reference.Canonical: |
3a127939 |
repoDigests = append(repoDigests, reference.FamiliarString(ref)) |
d5baf8dd |
}
}
var size int64
var layerMetadata map[string]string
layerID := img.RootFS.ChainID()
if layerID != "" { |
afd305c4 |
l, err := daemon.layerStores[img.OperatingSystem()].Get(layerID) |
d5baf8dd |
if err != nil {
return nil, err
} |
afd305c4 |
defer layer.ReleaseAndLog(daemon.layerStores[img.OperatingSystem()], l) |
d5baf8dd |
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
}
|
ce8e529e |
lastUpdated, err := daemon.imageStore.GetLastUpdated(img.ID()) |
016eea00 |
if err != nil {
return nil, err
}
|
d5baf8dd |
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, |
afd305c4 |
Os: img.OperatingSystem(), |
b7f537e8 |
OsVersion: img.OSVersion, |
d5baf8dd |
Size: size,
VirtualSize: size, // TODO: field unused, deprecate
RootFS: rootFSToAPIType(img.RootFS), |
016eea00 |
Metadata: types.ImageMetadata{
LastTagTime: lastUpdated,
}, |
d5baf8dd |
}
|
afd305c4 |
imageInspect.GraphDriver.Name = daemon.GraphDriverName(img.OperatingSystem()) |
d5baf8dd |
imageInspect.GraphDriver.Data = layerMetadata
return imageInspect, nil
} |