|
|
|
@ -30,6 +30,7 @@ import ( |
|
|
|
|
"os" |
|
|
|
|
|
|
|
|
|
"github.com/docker/docker/api/types" |
|
|
|
|
"github.com/docker/docker/api/types/container" |
|
|
|
|
"github.com/docker/docker/api/types/filters" |
|
|
|
|
"github.com/docker/docker/client" |
|
|
|
|
k3d "github.com/rancher/k3d/pkg/types" |
|
|
|
@ -50,20 +51,23 @@ func createContainer(dockerNode *NodeInDocker, name string) error { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// create container
|
|
|
|
|
create: // label used to restart creation process, if we're only missing the image
|
|
|
|
|
resp, err := docker.ContainerCreate(ctx, &dockerNode.ContainerConfig, &dockerNode.HostConfig, &dockerNode.NetworkingConfig, name) |
|
|
|
|
if err != nil { |
|
|
|
|
if client.IsErrNotFound(err) { |
|
|
|
|
if err := pullImage(&ctx, docker, dockerNode.ContainerConfig.Image); err != nil { |
|
|
|
|
log.Errorln("Failed to create container") |
|
|
|
|
return err |
|
|
|
|
var resp container.ContainerCreateCreatedBody |
|
|
|
|
for { |
|
|
|
|
resp, err = docker.ContainerCreate(ctx, &dockerNode.ContainerConfig, &dockerNode.HostConfig, &dockerNode.NetworkingConfig, name) |
|
|
|
|
if err != nil { |
|
|
|
|
if client.IsErrNotFound(err) { |
|
|
|
|
if err := pullImage(&ctx, docker, dockerNode.ContainerConfig.Image); err != nil { |
|
|
|
|
log.Errorln("Failed to create container") |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
goto create |
|
|
|
|
log.Errorln("Failed to create container") |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
log.Errorln("Failed to create container") |
|
|
|
|
return err |
|
|
|
|
log.Debugln("Created container", resp.ID) |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
log.Debugln("Created container", resp.ID) |
|
|
|
|
|
|
|
|
|
// start container
|
|
|
|
|
if err := docker.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { |
|
|
|
|