in pkg/rbeconfigsgen/rbeconfigsgen.go [254:288]
func newDockerRunner(containerImage string, stopContainer bool) (*dockerRunner, error) {
if containerImage == "" {
return nil, fmt.Errorf("container image was not specified")
}
d := &dockerRunner{
containerImage: containerImage,
stopContainer: stopContainer,
dockerPath: "docker",
}
if _, err := runCmd(d.dockerPath, "pull", d.containerImage); err != nil {
return nil, fmt.Errorf("docker was unable to pull the toolchain container image %q: %w", d.containerImage, err)
}
resolvedImage, err := runCmd(d.dockerPath, "inspect", "--format={{index .RepoDigests 0}}", d.containerImage)
if err != nil {
return nil, fmt.Errorf("failed to convert toolchain container image %q into a fully qualified image name by digest: %w", d.containerImage, err)
}
resolvedImage = strings.TrimSpace(resolvedImage)
log.Printf("Resolved toolchain image %q to fully qualified reference %q.", d.containerImage, resolvedImage)
d.resolvedImage = resolvedImage
cid, err := runCmd(d.dockerPath, "create", "--rm", d.resolvedImage, "sleep", "infinity")
if err != nil {
return nil, fmt.Errorf("failed to create a container with the toolchain container image: %w", err)
}
cid = strings.TrimSpace(cid)
if len(cid) != 64 {
return nil, fmt.Errorf("container ID %q extracted from the stdout of the container create command had unexpected length, got %d, want 64", cid, len(cid))
}
d.containerID = cid
log.Printf("Created container ID %v for toolchain container image %v.", d.containerID, d.resolvedImage)
if _, err := runCmd(d.dockerPath, "start", d.containerID); err != nil {
return nil, fmt.Errorf("failed to run the toolchain container: %w", err)
}
return d, nil
}