in builder/digest_docker.go [33:74]
func (d *dockerStoreDigest) PopulateDigest(ctx context.Context, reference *image.Reference) error {
if reference == nil {
return nil
}
if reference.Digest != "" {
return nil
}
// refString will always have the tag specified at this point.
// For "scratch", we have to compare it against "scratch:latest" even though
// scratch:latest isn't valid in a FROM clause.
if reference.Reference == NoBaseImageSpecifierLatest {
return nil
}
args := []string{
"docker",
"run",
"--rm",
// Mount home
"--volume", util.DockerSocketVolumeMapping,
"--volume", homeVol + ":" + homeWorkDir,
"--env", homeEnv,
"docker",
"inspect",
"--format",
"\"{{json .RepoDigests}}\"",
reference.Reference,
}
if d.debug {
log.Printf("query digest args: %v\n", args)
}
var buf bytes.Buffer
if err := d.procManager.Run(ctx, args, nil, &buf, &buf, ""); err != nil {
return errors.Wrapf(err, "failed to query digests, msg: %s", buf.String())
}
trimCharPredicate := func(c rune) bool {
return c == '\n' || c == '\r' || c == '"' || c == '\t'
}
reference.Digest = getRepoDigest(strings.TrimFunc(buf.String(), trimCharPredicate), reference)
return nil
}