in executors/docker/executor_docker.go [213:253]
func (s *executor) getPrebuiltImage() (*types.ImageInspect, error) {
architecture := s.getArchitecture()
if architecture == "" {
return nil, errors.New("unsupported docker architecture")
}
imageName := prebuiltImageName + ":" + architecture + "-" + common.REVISION
s.Debugln("Looking for prebuilt image", imageName, "...")
image, _, err := s.client.ImageInspectWithRaw(s.Context, imageName)
if err == nil {
return &image, nil
}
data, err := Asset("prebuilt-" + architecture + prebuiltImageExtension)
if err != nil {
return nil, fmt.Errorf("Unsupported architecture: %s: %q", architecture, err.Error())
}
s.Debugln("Loading prebuilt image...")
ref := prebuiltImageName
source := types.ImageImportSource{
Source: bytes.NewBuffer(data),
SourceName: "-",
}
options := types.ImageImportOptions{
Tag: architecture + "-" + common.REVISION,
}
if err := s.client.ImageImportBlocking(s.Context, source, ref, options); err != nil {
return nil, fmt.Errorf("Failed to import image: %s", err)
}
image, _, err = s.client.ImageInspectWithRaw(s.Context, imageName)
if err != nil {
s.Debugln("Inspecting imported image", imageName, "failed:", err)
return nil, err
}
return &image, err
}