Signed-off-by: David Calavera <david.calavera@gmail.com>
| ... | ... |
@@ -356,30 +356,6 @@ func (container *Container) Resize(h, w int) error {
|
| 356 | 356 |
return nil |
| 357 | 357 |
} |
| 358 | 358 |
|
| 359 |
-func (container *Container) export() (archive.Archive, error) {
|
|
| 360 |
- if err := container.Mount(); err != nil {
|
|
| 361 |
- return nil, err |
|
| 362 |
- } |
|
| 363 |
- |
|
| 364 |
- uidMaps, gidMaps := container.daemon.GetUIDGIDMaps() |
|
| 365 |
- archive, err := archive.TarWithOptions(container.basefs, &archive.TarOptions{
|
|
| 366 |
- Compression: archive.Uncompressed, |
|
| 367 |
- UIDMaps: uidMaps, |
|
| 368 |
- GIDMaps: gidMaps, |
|
| 369 |
- }) |
|
| 370 |
- if err != nil {
|
|
| 371 |
- container.Unmount() |
|
| 372 |
- return nil, err |
|
| 373 |
- } |
|
| 374 |
- arch := ioutils.NewReadCloserWrapper(archive, func() error {
|
|
| 375 |
- err := archive.Close() |
|
| 376 |
- container.Unmount() |
|
| 377 |
- return err |
|
| 378 |
- }) |
|
| 379 |
- container.logEvent("export")
|
|
| 380 |
- return arch, err |
|
| 381 |
-} |
|
| 382 |
- |
|
| 383 | 359 |
// Mount sets container.basefs |
| 384 | 360 |
func (container *Container) Mount() error {
|
| 385 | 361 |
return container.daemon.Mount(container) |
| ... | ... |
@@ -4,6 +4,8 @@ import ( |
| 4 | 4 |
"io" |
| 5 | 5 |
|
| 6 | 6 |
derr "github.com/docker/docker/errors" |
| 7 |
+ "github.com/docker/docker/pkg/archive" |
|
| 8 |
+ "github.com/docker/docker/pkg/ioutils" |
|
| 7 | 9 |
) |
| 8 | 10 |
|
| 9 | 11 |
// ContainerExport writes the contents of the container to the given |
| ... | ... |
@@ -14,7 +16,7 @@ func (daemon *Daemon) ContainerExport(name string, out io.Writer) error {
|
| 14 | 14 |
return err |
| 15 | 15 |
} |
| 16 | 16 |
|
| 17 |
- data, err := container.export() |
|
| 17 |
+ data, err := daemon.containerExport(container) |
|
| 18 | 18 |
if err != nil {
|
| 19 | 19 |
return derr.ErrorCodeExportFailed.WithArgs(name, err) |
| 20 | 20 |
} |
| ... | ... |
@@ -26,3 +28,27 @@ func (daemon *Daemon) ContainerExport(name string, out io.Writer) error {
|
| 26 | 26 |
} |
| 27 | 27 |
return nil |
| 28 | 28 |
} |
| 29 |
+ |
|
| 30 |
+func (daemon *Daemon) containerExport(container *Container) (archive.Archive, error) {
|
|
| 31 |
+ if err := daemon.Mount(container); err != nil {
|
|
| 32 |
+ return nil, err |
|
| 33 |
+ } |
|
| 34 |
+ |
|
| 35 |
+ uidMaps, gidMaps := daemon.GetUIDGIDMaps() |
|
| 36 |
+ archive, err := archive.TarWithOptions(container.basefs, &archive.TarOptions{
|
|
| 37 |
+ Compression: archive.Uncompressed, |
|
| 38 |
+ UIDMaps: uidMaps, |
|
| 39 |
+ GIDMaps: gidMaps, |
|
| 40 |
+ }) |
|
| 41 |
+ if err != nil {
|
|
| 42 |
+ daemon.unmount(container) |
|
| 43 |
+ return nil, err |
|
| 44 |
+ } |
|
| 45 |
+ arch := ioutils.NewReadCloserWrapper(archive, func() error {
|
|
| 46 |
+ err := archive.Close() |
|
| 47 |
+ container.Unmount() |
|
| 48 |
+ return err |
|
| 49 |
+ }) |
|
| 50 |
+ daemon.logContainerEvent(container, "export") |
|
| 51 |
+ return arch, err |
|
| 52 |
+} |