func()

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
}