本文整理汇总了Golang中github.com/docker/docker/pkg/archive.TarWithOptions函数的典型用法代码示例。如果您正苦于以下问题:Golang TarWithOptions函数的具体用法?Golang TarWithOptions怎么用?Golang TarWithOptions使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了TarWithOptions函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: BuildImage
func (b *DockerBuilder) BuildImage(build *Build, stream *streams.Output) error {
repoPath := fmt.Sprintf("%s/%s", b.cachePath, build.RepositoryName)
repo, err := findOrClone(repoPath, build.CloneURL)
if err != nil {
return err
}
remote, err := repo.LookupRemote("origin")
if err != nil {
return err
}
refSpecs, err := remote.FetchRefspecs()
handleError(err)
err = remote.Fetch(refSpecs, nil, "")
if err != nil {
return err
}
oid, err := git.NewOid(build.CommitID)
if err != nil {
return err
}
commit, err := repo.LookupCommit(oid)
handleError(err)
tree, err := commit.Tree()
handleError(err)
err = repo.CheckoutTree(tree, &git.CheckoutOpts{Strategy: git.CheckoutForce})
handleError(err)
err = repo.SetHeadDetached(oid, nil, "")
handleError(err)
build.ImageTag = build.CommitID[:7]
options := &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: []string{".git"},
IncludeFiles: []string{"."},
}
context, err := archive.TarWithOptions(repoPath, options)
name := fmt.Sprintf("%s/%s:%s", b.registryURL, build.RepositoryName, build.ImageTag)
err = b.dockerClient.BuildImage(docker.BuildImageOptions{
Dockerfile: "Dockerfile",
Name: name,
OutputStream: stream,
InputStream: context,
})
if err != nil {
return err
}
err = b.dockerClient.TagImage(name, docker.TagImageOptions{
Repo: fmt.Sprintf("%s/%s", b.registryURL, build.RepositoryName),
Tag: "latest",
Force: true,
})
return err
}
开发者ID:plietar,项目名称:builder,代码行数:60,代码来源:builder.go
示例2: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (a *Driver) Diff(id, parent string) (archive.Archive, error) {
// AUFS doesn't need the parent layer to produce a diff.
return archive.TarWithOptions(path.Join(a.rootPath(), "diff", id), &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: []string{".wh..wh.*"},
})
}
开发者ID:Crispy1975,项目名称:deis,代码行数:9,代码来源:aufs.go
示例3: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (a *Driver) Diff(id, parent string) (archive.Archive, error) {
// AUFS doesn't need the parent layer to produce a diff.
return archive.TarWithOptions(path.Join(a.rootPath(), "diff", id), &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: []string{archive.WhiteoutMetaPrefix + "*", "!" + archive.WhiteoutOpaqueDir},
})
}
开发者ID:harpsichord,项目名称:docker,代码行数:9,代码来源:aufs.go
示例4: Export
func (v *Volume) Export(resource, name string) (io.ReadCloser, error) {
if v.IsBindMount && filepath.Base(resource) == name {
name = ""
}
basePath, err := v.getResourcePath(resource)
if err != nil {
return nil, err
}
stat, err := os.Stat(basePath)
if err != nil {
return nil, err
}
var filter []string
if !stat.IsDir() {
d, f := path.Split(basePath)
basePath = d
filter = []string{f}
} else {
filter = []string{path.Base(basePath)}
basePath = path.Dir(basePath)
}
return archive.TarWithOptions(basePath, &archive.TarOptions{
Compression: archive.Uncompressed,
Name: name,
Includes: filter,
})
}
开发者ID:NERSC,项目名称:docker,代码行数:28,代码来源:volume.go
示例5: Copy
func (container *Container) Copy(resource string) (io.ReadCloser, error) {
container.Lock()
defer container.Unlock()
var err error
if err := container.Mount(); err != nil {
return nil, err
}
defer func() {
if err != nil {
// unmount any volumes
container.UnmountVolumes(true)
// unmount the container's rootfs
container.Unmount()
}
}()
mounts, err := container.setupMounts()
if err != nil {
return nil, err
}
for _, m := range mounts {
dest, err := container.GetResourcePath(m.Destination)
if err != nil {
return nil, err
}
if err := mount.Mount(m.Source, dest, "bind", "rbind,ro"); err != nil {
return nil, err
}
}
basePath, err := container.GetResourcePath(resource)
if err != nil {
return nil, err
}
stat, err := os.Stat(basePath)
if err != nil {
return nil, err
}
var filter []string
if !stat.IsDir() {
d, f := filepath.Split(basePath)
basePath = d
filter = []string{f}
} else {
filter = []string{filepath.Base(basePath)}
basePath = filepath.Dir(basePath)
}
archive, err := archive.TarWithOptions(basePath, &archive.TarOptions{
Compression: archive.Uncompressed,
IncludeFiles: filter,
})
if err != nil {
return nil, err
}
return ioutils.NewReadCloserWrapper(archive, func() error {
err := archive.Close()
container.UnmountVolumes(true)
container.Unmount()
return err
}),
nil
}
开发者ID:ngpestelos,项目名称:docker,代码行数:60,代码来源:container.go
示例6: Copy
func (container *Container) Copy(resource string) (io.ReadCloser, error) {
if err := container.Mount(); err != nil {
return nil, err
}
basePath, err := container.getResourcePath(resource)
if err != nil {
container.Unmount()
return nil, err
}
// Check if this is actually in a volume
for _, mnt := range container.VolumeMounts() {
if len(mnt.MountToPath) > 0 && strings.HasPrefix(resource, mnt.MountToPath[1:]) {
return mnt.Export(resource)
}
}
// Check if this is a special one (resolv.conf, hostname, ..)
if resource == "etc/resolv.conf" {
basePath = container.ResolvConfPath
}
if resource == "etc/hostname" {
basePath = container.HostnamePath
}
if resource == "etc/hosts" {
basePath = container.HostsPath
}
stat, err := os.Stat(basePath)
if err != nil {
container.Unmount()
return nil, err
}
var filter []string
if !stat.IsDir() {
d, f := path.Split(basePath)
basePath = d
filter = []string{f}
} else {
filter = []string{path.Base(basePath)}
basePath = path.Dir(basePath)
}
archive, err := archive.TarWithOptions(basePath, &archive.TarOptions{
Compression: archive.Uncompressed,
IncludeFiles: filter,
})
if err != nil {
container.Unmount()
return nil, err
}
return ioutils.NewReadCloserWrapper(archive, func() error {
err := archive.Close()
container.Unmount()
return err
}),
nil
}
开发者ID:paultag,项目名称:docker,代码行数:59,代码来源:container.go
示例7: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (a *Driver) Diff(id, parent string, options *archive.ChangeOptions) (archive.Archive, error) {
// AUFS doesn't need the parent layer to produce a diff.
return archive.TarWithOptions(path.Join(a.rootPath(), "diff", id), &archive.TarOptions{
Compression: archive.Uncompressed,
Includes: options.Includes,
Excludes: options.Excludes,
})
}
开发者ID:TencentSA,项目名称:docker-1.3,代码行数:10,代码来源:aufs.go
示例8: Copy
func (container *Container) Copy(resource string) (io.ReadCloser, error) {
container.Lock()
defer container.Unlock()
var err error
if err := container.Mount(); err != nil {
return nil, err
}
defer func() {
if err != nil {
container.Unmount()
}
}()
if err = container.mountVolumes(); err != nil {
container.unmountVolumes()
return nil, err
}
defer func() {
if err != nil {
container.unmountVolumes()
}
}()
basePath, err := container.GetResourcePath(resource)
if err != nil {
return nil, err
}
stat, err := os.Stat(basePath)
if err != nil {
return nil, err
}
var filter []string
if !stat.IsDir() {
d, f := path.Split(basePath)
basePath = d
filter = []string{f}
} else {
filter = []string{path.Base(basePath)}
basePath = path.Dir(basePath)
}
archive, err := archive.TarWithOptions(basePath, &archive.TarOptions{
Compression: archive.Uncompressed,
IncludeFiles: filter,
})
if err != nil {
return nil, err
}
return ioutils.NewReadCloserWrapper(archive, func() error {
err := archive.Close()
container.unmountVolumes()
container.Unmount()
return err
}),
nil
}
开发者ID:pbx0,项目名称:docker,代码行数:58,代码来源:container.go
示例9: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (d *Driver) Diff(id, parent string) (archive.Archive, error) {
diffPath := d.getDiffPath(id)
logrus.Debugf("Tar with options on %s", diffPath)
return archive.TarWithOptions(diffPath, &archive.TarOptions{
Compression: archive.Uncompressed,
UIDMaps: d.uidMaps,
GIDMaps: d.gidMaps,
WhiteoutFormat: archive.OverlayWhiteoutFormat,
})
}
开发者ID:kasisnu,项目名称:docker,代码行数:12,代码来源:overlay.go
示例10: TarStream
func (c *aufs) TarStream(id, parent string) (io.ReadCloser, error) {
path, _, err := c.Mount(id)
if err != nil {
return nil, err
}
return archive.TarWithOptions(path, &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: []string{archive.WhiteoutMetaPrefix + "*", "!" + archive.WhiteoutOpaqueDir},
})
}
开发者ID:thaJeztah,项目名称:v1.10-migrator,代码行数:11,代码来源:aufs.go
示例11: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (a *Driver) Diff(id, parent string) (io.ReadCloser, error) {
if !a.isParent(id, parent) {
return a.naiveDiff.Diff(id, parent)
}
// AUFS doesn't need the parent layer to produce a diff.
return archive.TarWithOptions(path.Join(a.rootPath(), "diff", id), &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: []string{archive.WhiteoutMetaPrefix + "*", "!" + archive.WhiteoutOpaqueDir},
UIDMaps: a.uidMaps,
GIDMaps: a.gidMaps,
})
}
开发者ID:msabansal,项目名称:docker,代码行数:15,代码来源:aufs.go
示例12: do_export
func do_export(ctx *context, ctrl *ext.Controller) bool {
r := ctrl.Request
if r.MethodToLower() != "get" {
ctrl.JsonError(http.StatusMethodNotAllowed, errors.New("method not allowed"))
return true
}
directory := path.Join(ctx.app.Options.Root, r.TrimSuffixURI(".export"))
var tarOpt archive.TarOptions
tarOpt.ExcludePatterns = append(tarOpt.ExcludePatterns,
".tmp", ".h2object", "h2object.pid", "h2object.conf")
tarOpt.Compression = archive.Gzip
rd, err := archive.TarWithOptions(directory, &tarOpt)
if err != nil {
ctrl.JsonError(http.StatusInternalServerError, err)
return true
}
defer rd.Close()
_, fname := path.Split(r.TrimSuffixURI(".export"))
if fname == "" {
fname = "h2object"
}
fname = fname + ".tar.gz"
fn := path.Join(ctx.app.Options.TempRoot, fname)
fd, err := os.Create(fn)
if err != nil {
ctrl.JsonError(http.StatusInternalServerError, err)
return true
}
if _, err := io.Copy(fd, rd); err != nil {
ctrl.JsonError(http.StatusInternalServerError, err)
return true
}
fd.Close()
fout, err := os.Open(fn)
if err != nil {
ctrl.JsonError(http.StatusInternalServerError, err)
return true
}
fstat, err := fout.Stat()
if err != nil {
ctrl.JsonError(http.StatusInternalServerError, err)
return true
}
ctrl.Binary(fname, fout, fstat.Size())
return true
}
开发者ID:h2object,项目名称:h2object,代码行数:51,代码来源:handle.go
示例13: Diff
// Diff produces an archive of the changes between the specified
// layer and its parent layer which may be "".
func (d *Driver) Diff(id, parent string) (io.ReadCloser, error) {
if !d.isParent(id, parent) {
return d.naiveDiff.Diff(id, parent)
}
diffPath := d.getDiffPath(id)
logrus.Debugf("Tar with options on %s", diffPath)
return archive.TarWithOptions(diffPath, &archive.TarOptions{
Compression: archive.Uncompressed,
UIDMaps: d.uidMaps,
GIDMaps: d.gidMaps,
WhiteoutFormat: archive.OverlayWhiteoutFormat,
})
}
开发者ID:msabansal,项目名称:docker,代码行数:16,代码来源:overlay.go
示例14: Compress
func (c *tarArchiver) Compress(dirPath string) (io.ReadCloser, error) {
excludePatterns, err := parseExcludePatternsFiles(dirPath, c.opts.ExcludePatternsFiles)
if err != nil {
return nil, err
}
return archive.TarWithOptions(
dirPath,
&archive.TarOptions{
IncludeFiles: []string{"."},
ExcludePatterns: excludePatterns,
Compression: archive.Uncompressed,
NoLchown: true,
},
)
}
开发者ID:peter-edge,项目名称:pkg-go,代码行数:15,代码来源:tar_compressor.go
示例15: createTarStream
func createTarStream(srcPath string) (io.ReadCloser, error) {
excludes, err := parseDockerignore(srcPath)
if err != nil {
return nil, err
}
if err := validateContextDirectory(srcPath, excludes); err != nil {
return nil, err
}
tarOpts := &archive.TarOptions{
Excludes: excludes,
Compression: archive.Uncompressed,
NoLchown: true,
}
return archive.TarWithOptions(srcPath, tarOpts)
}
开发者ID:hortonworks,项目名称:kubernetes-yarn,代码行数:16,代码来源:tar.go
示例16: tar
func tar(dirPath string, includeFiles []string) (retVal []byte, retErr error) {
readCloser, err := archive.TarWithOptions(
dirPath,
&archive.TarOptions{
IncludeFiles: includeFiles,
Compression: archive.Uncompressed,
NoLchown: true,
},
)
if err != nil {
return nil, err
}
defer func() {
if err := readCloser.Close(); err != nil && retErr == nil {
retErr = err
}
}()
return ioutil.ReadAll(readCloser)
}
开发者ID:sr,项目名称:protoeasy,代码行数:19,代码来源:util.go
示例17: createTarStream
func createTarStream(srcPath, dockerfilePath string) (io.ReadCloser, error) {
excludes, err := parseDockerignore(srcPath)
if err != nil {
return nil, err
}
includes := []string{"."}
// If .dockerignore mentions .dockerignore or the Dockerfile
// then make sure we send both files over to the daemon
// because Dockerfile is, obviously, needed no matter what, and
// .dockerignore is needed to know if either one needs to be
// removed. The deamon will remove them for us, if needed, after it
// parses the Dockerfile.
//
// https://github.com/docker/docker/issues/8330
//
forceIncludeFiles := []string{".dockerignore", dockerfilePath}
for _, includeFile := range forceIncludeFiles {
if includeFile == "" {
continue
}
keepThem, err := fileutils.Matches(includeFile, excludes)
if err != nil {
return nil, fmt.Errorf("cannot match .dockerfile: '%s', error: %s", includeFile, err)
}
if keepThem {
includes = append(includes, includeFile)
}
}
if err := validateContextDirectory(srcPath, excludes); err != nil {
return nil, err
}
tarOpts := &archive.TarOptions{
ExcludePatterns: excludes,
IncludeFiles: includes,
Compression: archive.Uncompressed,
NoLchown: true,
}
return archive.TarWithOptions(srcPath, tarOpts)
}
开发者ID:CNDonny,项目名称:scope,代码行数:43,代码来源:tar.go
示例18: getArchive
// getArchive returns the tarfile io.ReadCloser. It is a direct copy of the
// logic found in the official docker client.
// See <https://github.com/docker/docker/blob/78f2b8d8/api/client/build.go#L126-L172>.
func getArchive(contextDir, relDockerfile string) (io.ReadCloser, error) {
var err error
// And canonicalize dockerfile name to a platform-independent one
relDockerfile, err = archive.CanonicalTarNameForPath(relDockerfile)
if err != nil {
return nil, fmt.Errorf("cannot canonicalize dockerfile path %s: %v", relDockerfile, err)
}
f, err := os.Open(filepath.Join(contextDir, ".dockerignore"))
if err != nil && !os.IsNotExist(err) {
return nil, err
}
var excludes []string
if err == nil {
excludes, err = dockerignore.ReadAll(f)
if err != nil {
return nil, err
}
}
// If .dockerignore mentions .dockerignore or the Dockerfile
// then make sure we send both files over to the daemon
// because Dockerfile is, obviously, needed no matter what, and
// .dockerignore is needed to know if either one needs to be
// removed. The daemon will remove them for us, if needed, after it
// parses the Dockerfile. Ignore errors here, as they will have been
// caught by validateContextDirectory above.
var includes = []string{"."}
keepThem1, _ := fileutils.Matches(".dockerignore", excludes)
keepThem2, _ := fileutils.Matches(relDockerfile, excludes)
if keepThem1 || keepThem2 {
includes = append(includes, ".dockerignore", relDockerfile)
}
return archive.TarWithOptions(contextDir, &archive.TarOptions{
Compression: archive.Uncompressed,
ExcludePatterns: excludes,
IncludeFiles: includes,
})
}
开发者ID:pwaller,项目名称:docker-show-context,代码行数:45,代码来源:main.go
示例19: runCreate
func runCreate(dockerCli *command.DockerCli, options pluginCreateOptions) error {
var (
createCtx io.ReadCloser
err error
)
if err := validateTag(options.repoName); err != nil {
return err
}
absContextDir, err := validateContextDir(options.context)
if err != nil {
return err
}
if err := validateConfig(options.context); err != nil {
return err
}
compression := archive.Uncompressed
if options.compress {
logrus.Debugf("compression enabled")
compression = archive.Gzip
}
createCtx, err = archive.TarWithOptions(absContextDir, &archive.TarOptions{
Compression: compression,
})
if err != nil {
return err
}
ctx := context.Background()
createOptions := types.PluginCreateOptions{RepoName: options.repoName}
if err = dockerCli.Client().PluginCreate(ctx, createCtx, createOptions); err != nil {
return err
}
fmt.Fprintln(dockerCli.Out(), options.repoName)
return nil
}
开发者ID:harche,项目名称:docker,代码行数:42,代码来源:create.go
示例20: containerExport
func (daemon *Daemon) containerExport(container *container.Container) (io.ReadCloser, error) {
if err := daemon.Mount(container); err != nil {
return nil, err
}
uidMaps, gidMaps := daemon.GetUIDGIDMaps()
archive, err := archive.TarWithOptions(container.BaseFS, &archive.TarOptions{
Compression: archive.Uncompressed,
UIDMaps: uidMaps,
GIDMaps: gidMaps,
})
if err != nil {
daemon.Unmount(container)
return nil, err
}
arch := ioutils.NewReadCloserWrapper(archive, func() error {
err := archive.Close()
daemon.Unmount(container)
return err
})
daemon.LogContainerEvent(container, "export")
return arch, err
}
开发者ID:Mic92,项目名称:docker,代码行数:23,代码来源:export.go
注:本文中的github.com/docker/docker/pkg/archive.TarWithOptions函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论