docker-container: check local image store if pulling image failed

When booting `docker-container` driver, it will pull and run image
`moby/buildkit:buildx-stable-1`.
If current node cannot connect to dockerhub, driver `docker-container`
will always booting failure.
But user may already load the image manually or pull it from a priviate
registry.
Buildx should check local docker image store after pull failed.

Fixes: #199 issuecomment-561996661

Signed-off-by: Lu Jingxiao <lujingxiao@huawei.com>
pull/200/head
l00397676 5 years ago
parent 8bce430f4d
commit 5b9d88b3ad

@ -57,7 +57,7 @@ func (d *Driver) create(ctx context.Context, l progress.SubLogger) error {
if d.image != "" { if d.image != "" {
imageName = d.image imageName = d.image
} }
env := d.env
if err := l.Wrap("pulling image "+imageName, func() error { if err := l.Wrap("pulling image "+imageName, func() error {
rc, err := d.DockerAPI.ImageCreate(ctx, imageName, types.ImageCreateOptions{}) rc, err := d.DockerAPI.ImageCreate(ctx, imageName, types.ImageCreateOptions{})
if err != nil { if err != nil {
@ -66,12 +66,18 @@ func (d *Driver) create(ctx context.Context, l progress.SubLogger) error {
_, err = io.Copy(ioutil.Discard, rc) _, err = io.Copy(ioutil.Discard, rc)
return err return err
}); err != nil { }); err != nil {
return err // image pulling failed, check if it exists in local image store.
// if not, return pulling error. otherwise log it.
_, _, errInspect := d.DockerAPI.ImageInspectWithRaw(ctx, imageName)
if errInspect != nil {
return err
}
l.Wrap("pulling failed, using local image "+imageName, func() error { return nil })
} }
cfg := &container.Config{ cfg := &container.Config{
Image: imageName, Image: imageName,
Env: env, Env: d.env,
} }
if d.InitConfig.BuildkitFlags != nil { if d.InitConfig.BuildkitFlags != nil {
cfg.Cmd = d.InitConfig.BuildkitFlags cfg.Cmd = d.InitConfig.BuildkitFlags

Loading…
Cancel
Save