func (d *kubeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error { // RegistryAuth is the base64 encoded credentials for the registry base64Auth, err := base64EncodeAuth(auth) if err != nil { return err } opts.RegistryAuth = base64Auth ctx, cancel := d.getCancelableContext() defer cancel() resp, err := d.client.ImagePull(ctx, image, opts) if err != nil { return err } defer resp.Close() reporter := newProgressReporter(image, cancel) reporter.start() defer reporter.stop() decoder := json.NewDecoder(resp) for { var msg dockermessage.JSONMessage err := decoder.Decode(&msg) if err == io.EOF { break } if err != nil { return err } if msg.Error != nil { return msg.Error } reporter.set(&msg) } return nil }
func (d *kubeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error { // RegistryAuth is the base64 encoded credentials for the registry base64Auth, err := base64EncodeAuth(auth) if err != nil { return err } opts.RegistryAuth = base64Auth // Don't set timeout for the context because image pulling can be // take an arbitrarily long time. resp, err := d.client.ImagePull(context.Background(), image, opts) if err != nil { return err } defer resp.Close() reporter := newProgressReporter(image, defaultImagePullingProgressReportInterval) reporter.start() defer reporter.stop() decoder := json.NewDecoder(resp) for { var msg dockermessage.JSONMessage err := decoder.Decode(&msg) if err == io.EOF { break } if err != nil { return err } if msg.Error != nil { return msg.Error } reporter.set(&msg) } return nil }
func (d *kubeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error { // RegistryAuth is the base64 encoded credentials for the registry base64Auth, err := base64EncodeAuth(auth) if err != nil { return err } opts.ImageID = image opts.RegistryAuth = base64Auth resp, err := d.client.ImagePull(getDefaultContext(), opts, nil) if err != nil { return err } defer resp.Close() // TODO(random-liu): Use the image pulling progress information. decoder := json.NewDecoder(resp) for { var msg dockermessage.JSONMessage err := decoder.Decode(&msg) if err == io.EOF { break } if err != nil { return err } if msg.Error != nil { return msg.Error } } return nil }
func (d *kubeDockerClient) PullImage(image string, auth dockertypes.AuthConfig, opts dockertypes.ImagePullOptions) error { // RegistryAuth is the base64 encoded credentials for the registry base64Auth, err := base64EncodeAuth(auth) if err != nil { return err } ctx, cancel := context.WithCancel(context.Background()) defer cancel() opts.RegistryAuth = base64Auth resp, err := d.client.ImagePull(ctx, image, opts) if ctxErr := contextError(ctx); ctxErr != nil { return ctxErr } if err != nil { return err } defer resp.Close() // TODO(random-liu): Use the image pulling progress information. decoder := json.NewDecoder(resp) for { var msg dockermessage.JSONMessage err := decoder.Decode(&msg) if err == io.EOF { break } if err != nil { return err } if msg.Error != nil { return msg.Error } } return nil }
// Spool spools an image with a tag latest func (b *Box) Spool(ctx context.Context, name string, opts isolate.Profile) (err error) { profile, err := convertProfile(opts) if err != nil { apexctx.GetLogger(ctx).WithError(err).WithFields(log.Fields{"name": name}).Info("unbale to convert raw profile to Docker specific profile") return err } if profile.Registry == "" { apexctx.GetLogger(ctx).WithFields(log.Fields{"name": name}).Info("local image will be used") return nil } defer apexctx.GetLogger(ctx).WithField("name", name).Trace("spooling an image").Stop(&err) pullOpts := types.ImagePullOptions{ All: false, } if registryAuth, ok := b.config.RegistryAuth[profile.Registry]; ok { pullOpts.RegistryAuth = registryAuth } ref := fmt.Sprintf("%s:%s", filepath.Join(profile.Registry, profile.Repository, name), "latest") body, err := b.client.ImagePull(ctx, ref, pullOpts) if err != nil { apexctx.GetLogger(ctx).WithError(err).WithFields( log.Fields{"name": name, "ref": ref}).Error("unable to pull an image") return err } defer body.Close() if err := decodeImagePull(ctx, body); err != nil { return err } return nil }