Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera authored on 2015/11/03 08:53:26... | ... |
@@ -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 |
+} |