Skip to content

Commit

Permalink
contrib: load image history from 'manifest.json' first due to
Browse files Browse the repository at this point in the history
docker 1.10 changes.

Fixes #69

Signed-off-by: liangchenye <liangchenye@huawei.com>
  • Loading branch information
liangchenye committed Feb 14, 2016
1 parent 6aa501f commit fee0bb5
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions contrib/analyze-local-images/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@ func main() {

// Retrieve history
fmt.Println("Getting image's history")
layerIDs, err := history(imageName)
layerIDs, err := historyFromManifest(path)
if err != nil {
layerIDs, err = historyFromCommand(imageName)
}
if err != nil || len(layerIDs) == 0 {
log.Fatalf("- Could not get image's history: %s\n", err)
}
Expand Down Expand Up @@ -168,7 +171,34 @@ func save(imageName string) (string, error) {
return path, nil
}

func history(imageName string) ([]string, error) {
func historyFromManifest(path string) ([]string, error) {
mf, err := os.Open(path + "/manifest.json")
if err != nil {
return nil, err
}
defer mf.Close()

// https://github.com/docker/docker/blob/master/image/tarexport/tarexport.go#L17
type manifestItem struct {
Config string
RepoTags []string
Layers []string
}

var manifest []manifestItem
if err = json.NewDecoder(mf).Decode(&manifest); err != nil {
return nil, err
} else if len(manifest) != 1 {
return nil, err
}
var layers []string
for _, layer := range manifest[0].Layers {
layers = append(layers, strings.TrimSuffix(layer, "/layer.tar"))
}
return layers, nil
}

func historyFromCommand(imageName string) ([]string, error) {
var stderr bytes.Buffer
cmd := exec.Command("docker", "history", "-q", "--no-trunc", imageName)
cmd.Stderr = &stderr
Expand Down

0 comments on commit fee0bb5

Please sign in to comment.