This is part of an effort to break apart the deprecated server/ package
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
| ... | ... |
@@ -120,6 +120,9 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
|
| 120 | 120 |
if err := eng.Register("kill", daemon.ContainerKill); err != nil {
|
| 121 | 121 |
return err |
| 122 | 122 |
} |
| 123 |
+ if err := eng.Register("export", daemon.ContainerExport); err != nil {
|
|
| 124 |
+ return err |
|
| 125 |
+ } |
|
| 123 | 126 |
return nil |
| 124 | 127 |
} |
| 125 | 128 |
|
| 126 | 129 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,30 @@ |
| 0 |
+package daemon |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "io" |
|
| 4 |
+ |
|
| 5 |
+ "github.com/docker/docker/engine" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+func (daemon *Daemon) ContainerExport(job *engine.Job) engine.Status {
|
|
| 9 |
+ if len(job.Args) != 1 {
|
|
| 10 |
+ return job.Errorf("Usage: %s container_id", job.Name)
|
|
| 11 |
+ } |
|
| 12 |
+ name := job.Args[0] |
|
| 13 |
+ if container := daemon.Get(name); container != nil {
|
|
| 14 |
+ data, err := container.Export() |
|
| 15 |
+ if err != nil {
|
|
| 16 |
+ return job.Errorf("%s: %s", name, err)
|
|
| 17 |
+ } |
|
| 18 |
+ defer data.Close() |
|
| 19 |
+ |
|
| 20 |
+ // Stream the entire contents of the container (basically a volatile snapshot) |
|
| 21 |
+ if _, err := io.Copy(job.Stdout, data); err != nil {
|
|
| 22 |
+ return job.Errorf("%s: %s", name, err)
|
|
| 23 |
+ } |
|
| 24 |
+ // FIXME: factor job-specific LogEvent to engine.Job.Run() |
|
| 25 |
+ job.Eng.Job("log", "export", container.ID, daemon.Repositories().ImageName(container.Image)).Run()
|
|
| 26 |
+ return engine.StatusOK |
|
| 27 |
+ } |
|
| 28 |
+ return job.Errorf("No such container: %s", name)
|
|
| 29 |
+} |
| ... | ... |
@@ -29,29 +29,6 @@ import ( |
| 29 | 29 |
"github.com/docker/docker/utils" |
| 30 | 30 |
) |
| 31 | 31 |
|
| 32 |
-func (srv *Server) ContainerExport(job *engine.Job) engine.Status {
|
|
| 33 |
- if len(job.Args) != 1 {
|
|
| 34 |
- return job.Errorf("Usage: %s container_id", job.Name)
|
|
| 35 |
- } |
|
| 36 |
- name := job.Args[0] |
|
| 37 |
- if container := srv.daemon.Get(name); container != nil {
|
|
| 38 |
- data, err := container.Export() |
|
| 39 |
- if err != nil {
|
|
| 40 |
- return job.Errorf("%s: %s", name, err)
|
|
| 41 |
- } |
|
| 42 |
- defer data.Close() |
|
| 43 |
- |
|
| 44 |
- // Stream the entire contents of the container (basically a volatile snapshot) |
|
| 45 |
- if _, err := io.Copy(job.Stdout, data); err != nil {
|
|
| 46 |
- return job.Errorf("%s: %s", name, err)
|
|
| 47 |
- } |
|
| 48 |
- // FIXME: factor job-specific LogEvent to engine.Job.Run() |
|
| 49 |
- srv.LogEvent("export", container.ID, srv.daemon.Repositories().ImageName(container.Image))
|
|
| 50 |
- return engine.StatusOK |
|
| 51 |
- } |
|
| 52 |
- return job.Errorf("No such container: %s", name)
|
|
| 53 |
-} |
|
| 54 |
- |
|
| 55 | 32 |
func (srv *Server) ContainerTop(job *engine.Job) engine.Status {
|
| 56 | 33 |
if len(job.Args) != 1 && len(job.Args) != 2 {
|
| 57 | 34 |
return job.Errorf("Not enough arguments. Usage: %s CONTAINER [PS_ARGS]\n", job.Name)
|
| ... | ... |
@@ -86,7 +86,6 @@ func InitServer(job *engine.Job) engine.Status {
|
| 86 | 86 |
job.Eng.Hack_SetGlobalVar("httpapi.daemon", srv.daemon)
|
| 87 | 87 |
|
| 88 | 88 |
for name, handler := range map[string]engine.Handler{
|
| 89 |
- "export": srv.ContainerExport, |
|
| 90 | 89 |
"create": srv.ContainerCreate, |
| 91 | 90 |
"stop": srv.ContainerStop, |
| 92 | 91 |
"restart": srv.ContainerRestart, |