export.go 774 B

123456789101112131415161718192021222324252627282930
  1. package daemon
  2. import (
  3. "io"
  4. "github.com/docker/docker/engine"
  5. )
  6. func (daemon *Daemon) ContainerExport(job *engine.Job) engine.Status {
  7. if len(job.Args) != 1 {
  8. return job.Errorf("Usage: %s container_id", job.Name)
  9. }
  10. name := job.Args[0]
  11. if container := daemon.Get(name); container != nil {
  12. data, err := container.Export()
  13. if err != nil {
  14. return job.Errorf("%s: %s", name, err)
  15. }
  16. defer data.Close()
  17. // Stream the entire contents of the container (basically a volatile snapshot)
  18. if _, err := io.Copy(job.Stdout, data); err != nil {
  19. return job.Errorf("%s: %s", name, err)
  20. }
  21. // FIXME: factor job-specific LogEvent to engine.Job.Run()
  22. container.LogEvent("export")
  23. return engine.StatusOK
  24. }
  25. return job.Errorf("No such container: %s", name)
  26. }