| package daemon // import "github.com/docker/docker/daemon" |
| |
| import ( |
| "io" |
| "os" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/errdefs" |
| ) |
| |
| // ContainerStatPath stats the filesystem resource at the specified path in the |
| // container identified by the given name. |
| func (daemon *Daemon) ContainerStatPath(name string, path string) (stat *types.ContainerPathStat, err error) { |
| ctr, err := daemon.GetContainer(name) |
| if err != nil { |
| return nil, err |
| } |
| |
| stat, err = daemon.containerStatPath(ctr, path) |
| if err == nil { |
| return stat, nil |
| } |
| |
| if os.IsNotExist(err) { |
| return nil, containerFileNotFound{path, name} |
| } |
| return nil, errdefs.System(err) |
| } |
| |
| // ContainerArchivePath creates an archive of the filesystem resource at the |
| // specified path in the container identified by the given name. Returns a |
| // tar archive of the resource and whether it was a directory or a single file. |
| func (daemon *Daemon) ContainerArchivePath(name string, path string) (content io.ReadCloser, stat *types.ContainerPathStat, err error) { |
| ctr, err := daemon.GetContainer(name) |
| if err != nil { |
| return nil, nil, err |
| } |
| |
| content, stat, err = daemon.containerArchivePath(ctr, path) |
| if err == nil { |
| return content, stat, nil |
| } |
| |
| if os.IsNotExist(err) { |
| return nil, nil, containerFileNotFound{path, name} |
| } |
| return nil, nil, errdefs.System(err) |
| } |
| |
| // ContainerExtractToDir extracts the given archive to the specified location |
| // in the filesystem of the container identified by the given name. The given |
| // path must be of a directory in the container. If it is not, the error will |
| // be an errdefs.InvalidParameter. If noOverwriteDirNonDir is true then it will |
| // be an error if unpacking the given content would cause an existing directory |
| // to be replaced with a non-directory and vice versa. |
| func (daemon *Daemon) ContainerExtractToDir(name, path string, copyUIDGID, noOverwriteDirNonDir bool, content io.Reader) error { |
| ctr, err := daemon.GetContainer(name) |
| if err != nil { |
| return err |
| } |
| |
| err = daemon.containerExtractToDir(ctr, path, copyUIDGID, noOverwriteDirNonDir, content) |
| if err == nil { |
| return nil |
| } |
| |
| if os.IsNotExist(err) { |
| return containerFileNotFound{path, name} |
| } |
| return errdefs.System(err) |
| } |