51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package docker
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// CopyFromContainerOptions contains the set of options used for copying
|
|
// files from a container.
|
|
//
|
|
// Deprecated: Use DownloadFromContainerOptions and DownloadFromContainer instead.
|
|
type CopyFromContainerOptions struct {
|
|
OutputStream io.Writer `json:"-"`
|
|
Container string `json:"-"`
|
|
Resource string
|
|
Context context.Context `json:"-"`
|
|
}
|
|
|
|
// CopyFromContainer copies files from a container.
|
|
//
|
|
// Deprecated: Use DownloadFromContainer and DownloadFromContainer instead.
|
|
func (c *Client) CopyFromContainer(opts CopyFromContainerOptions) error {
|
|
if opts.Container == "" {
|
|
return &NoSuchContainer{ID: opts.Container}
|
|
}
|
|
if c.serverAPIVersion == nil {
|
|
c.checkAPIVersion()
|
|
}
|
|
if c.serverAPIVersion != nil && c.serverAPIVersion.GreaterThanOrEqualTo(apiVersion124) {
|
|
return errors.New("go-dockerclient: CopyFromContainer is no longer available in Docker >= 1.12, use DownloadFromContainer instead")
|
|
}
|
|
url := fmt.Sprintf("/containers/%s/copy", opts.Container)
|
|
resp, err := c.do(http.MethodPost, url, doOptions{
|
|
data: opts,
|
|
context: opts.Context,
|
|
})
|
|
if err != nil {
|
|
var e *Error
|
|
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
|
return &NoSuchContainer{ID: opts.Container}
|
|
}
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
_, err = io.Copy(opts.OutputStream, resp.Body)
|
|
return err
|
|
}
|