in executors/docker/docker.go [645:702]
func (e *executor) createContainer(
containerType string,
imageDefinition common.Image,
allowedInternalImages []string,
cfgTor containerConfigurator,
) (*types.ContainerJSON, error) {
if e.volumesManager == nil {
return nil, errVolumesManagerUndefined
}
image, err := e.expandAndGetDockerImage(
imageDefinition.Name,
allowedInternalImages,
imageDefinition.ExecutorOptions.Docker,
imageDefinition.PullPolicies,
)
if err != nil {
return nil, err
}
containerName := e.makeContainerName(containerType)
config, err := cfgTor.ContainerConfig(image)
if err != nil {
return nil, fmt.Errorf("failed to create container configuration: %w", err)
}
hostConfig, err := cfgTor.HostConfig()
if err != nil {
return nil, err
}
networkConfig := cfgTor.NetworkConfig([]string{"build", containerName})
var platform *v1.Platform
// predefined/helper container always uses native platform
if containerType == buildContainerType {
platform = platformForImage(image, imageDefinition.ExecutorOptions)
}
// this will fail potentially some builds if there's name collision
_ = e.removeContainer(e.Context, containerName)
e.BuildLogger.Debugln("Creating container", containerName, "...")
resp, err := e.client.ContainerCreate(e.Context, config, hostConfig, networkConfig, platform, containerName)
if resp.ID != "" {
e.temporary = append(e.temporary, resp.ID)
if containerType == buildContainerType {
e.buildContainerID = resp.ID
}
}
if err != nil {
return nil, err
}
inspect, err := e.client.ContainerInspect(e.Context, resp.ID)
return &inspect, err
}