| package client | |
| import ( | |
| "context" | |
| "io" | |
| "net/http" | |
| "net/url" | |
| ) | |
| // ImageLoadResult returns information to the client about a load process. | |
| // It implements [io.ReadCloser] and must be closed to avoid a resource leak. | |
| type ImageLoadResult interface { | |
| io.ReadCloser | |
| } | |
| // ImageLoad loads an image in the docker host from the client host. It's up | |
| // to the caller to close the [ImageLoadResult] returned by this function. | |
| // | |
| // The underlying [io.ReadCloser] is automatically closed if the context is canceled, | |
| func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, loadOpts ...ImageLoadOption) (ImageLoadResult, error) { | |
| var opts imageLoadOpts | |
| for _, opt := range loadOpts { | |
| if err := opt.Apply(&opts); err != nil { | |
| return nil, err | |
| } | |
| } | |
| query := url.Values{} | |
| query.Set("quiet", "0") | |
| if opts.apiOptions.Quiet { | |
| query.Set("quiet", "1") | |
| } | |
| if len(opts.apiOptions.Platforms) > 0 { | |
| if err := cli.requiresVersion(ctx, "1.48", "platform"); err != nil { | |
| return nil, err | |
| } | |
| p, err := encodePlatforms(opts.apiOptions.Platforms...) | |
| if err != nil { | |
| return nil, err | |
| } | |
| query["platform"] = p | |
| } | |
| resp, err := cli.postRaw(ctx, "/images/load", query, input, http.Header{ | |
| "Content-Type": {"application/x-tar"}, | |
| }) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &imageLoadResult{ | |
| ReadCloser: newCancelReadCloser(ctx, resp.Body), | |
| }, nil | |
| } | |
| // imageLoadResult returns information to the client about a load process. | |
| type imageLoadResult struct { | |
| io.ReadCloser | |
| } | |
| var ( | |
| _ io.ReadCloser = (*imageLoadResult)(nil) | |
| _ ImageLoadResult = (*imageLoadResult)(nil) | |
| ) |