Browse code

Decouple daemon and container to export containers.

Signed-off-by: David Calavera <david.calavera@gmail.com>

David Calavera authored on 2015/11/03 08:53:26
Showing 2 changed files
... ...
@@ -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
+}