Skip to content

Commit

Permalink
contrib: Revert "Merge pull request #367 from jzelinskie/analyze-laye…
Browse files Browse the repository at this point in the history
…rs-v2"

This reverts commit e639367, reversing
changes made to f3848d9. Issue involved
the docker history command providing missing fs layers that were not in
the saved image. Revert commit to using the manifest file again.
  • Loading branch information
Josue Diaz committed Apr 28, 2017
1 parent b02714c commit f3840f3
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 @@ -154,7 +154,10 @@ func AnalyzeLocalImage(imageName string, minSeverity types.Priority, endpoint, m

// Retrieve history.
log.Println("Retrieving image history")
layerIDs, err := historyFromCommand(imageName)
layerIDs, err := historyFromManifest(tmpPath)
if err != nil {
layerIDs, err = historyFromCommand(imageName)
}
if err != nil || len(layerIDs) == 0 {
return fmt.Errorf("Could not get image's history: %s", err)
}
Expand Down Expand Up @@ -269,7 +272,7 @@ func AnalyzeLocalImage(imageName string, minSeverity types.Priority, endpoint, m
fmt.Printf("%s No vulnerabilities matching the minimum severity level were detected in your image\n", color.YellowString("NOTE:"))
} else {
return fmt.Errorf("A total of %d vulnerabilities have been detected in your image", len(vulnerabilities))
}
}

return nil
}
Expand Down Expand Up @@ -306,6 +309,33 @@ func save(imageName, path string) error {
return nil
}

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)
Expand Down

0 comments on commit f3840f3

Please sign in to comment.