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)
| 1 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,33 @@ |
| 0 |
+package daemon |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "io" |
|
| 4 |
+ |
|
| 5 |
+ "github.com/docker/docker/engine" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+func (daemon *Daemon) ContainerCopy(job *engine.Job) engine.Status {
|
|
| 9 |
+ if len(job.Args) != 2 {
|
|
| 10 |
+ return job.Errorf("Usage: %s CONTAINER RESOURCE\n", job.Name)
|
|
| 11 |
+ } |
|
| 12 |
+ |
|
| 13 |
+ var ( |
|
| 14 |
+ name = job.Args[0] |
|
| 15 |
+ resource = job.Args[1] |
|
| 16 |
+ ) |
|
| 17 |
+ |
|
| 18 |
+ if container := daemon.Get(name); container != nil {
|
|
| 19 |
+ |
|
| 20 |
+ data, err := container.Copy(resource) |
|
| 21 |
+ if err != nil {
|
|
| 22 |
+ return job.Error(err) |
|
| 23 |
+ } |
|
| 24 |
+ defer data.Close() |
|
| 25 |
+ |
|
| 26 |
+ if _, err := io.Copy(job.Stdout, data); err != nil {
|
|
| 27 |
+ return job.Error(err) |
|
| 28 |
+ } |
|
| 29 |
+ return engine.StatusOK |
|
| 30 |
+ } |
|
| 31 |
+ return job.Errorf("No such container: %s", name)
|
|
| 32 |
+} |
| ... | ... |
@@ -152,6 +152,9 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
|
| 152 | 152 |
if err := eng.Register("delete", daemon.ContainerDestroy); err != nil {
|
| 153 | 153 |
return err |
| 154 | 154 |
} |
| 155 |
+ if err := eng.Register("container_copy", daemon.ContainerCopy); err != nil {
|
|
| 156 |
+ return err |
|
| 157 |
+ } |
|
| 155 | 158 |
return nil |
| 156 | 159 |
} |
| 157 | 160 |
|
| ... | ... |
@@ -7,7 +7,6 @@ package server |
| 7 | 7 |
import ( |
| 8 | 8 |
"errors" |
| 9 | 9 |
"fmt" |
| 10 |
- "io" |
|
| 11 | 10 |
"os/exec" |
| 12 | 11 |
"strconv" |
| 13 | 12 |
"strings" |
| ... | ... |
@@ -218,29 +217,3 @@ func (srv *Server) Containers(job *engine.Job) engine.Status {
|
| 218 | 218 |
} |
| 219 | 219 |
return engine.StatusOK |
| 220 | 220 |
} |
| 221 |
- |
|
| 222 |
-func (srv *Server) ContainerCopy(job *engine.Job) engine.Status {
|
|
| 223 |
- if len(job.Args) != 2 {
|
|
| 224 |
- return job.Errorf("Usage: %s CONTAINER RESOURCE\n", job.Name)
|
|
| 225 |
- } |
|
| 226 |
- |
|
| 227 |
- var ( |
|
| 228 |
- name = job.Args[0] |
|
| 229 |
- resource = job.Args[1] |
|
| 230 |
- ) |
|
| 231 |
- |
|
| 232 |
- if container := srv.daemon.Get(name); container != nil {
|
|
| 233 |
- |
|
| 234 |
- data, err := container.Copy(resource) |
|
| 235 |
- if err != nil {
|
|
| 236 |
- return job.Error(err) |
|
| 237 |
- } |
|
| 238 |
- defer data.Close() |
|
| 239 |
- |
|
| 240 |
- if _, err := io.Copy(job.Stdout, data); err != nil {
|
|
| 241 |
- return job.Error(err) |
|
| 242 |
- } |
|
| 243 |
- return engine.StatusOK |
|
| 244 |
- } |
|
| 245 |
- return job.Errorf("No such container: %s", name)
|
|
| 246 |
-} |
| ... | ... |
@@ -86,24 +86,23 @@ 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 |
- "tag": srv.ImageTag, // FIXME merge with "image_tag" |
|
| 90 |
- "info": srv.DockerInfo, |
|
| 91 |
- "image_export": srv.ImageExport, |
|
| 92 |
- "images": srv.Images, |
|
| 93 |
- "history": srv.ImageHistory, |
|
| 94 |
- "viz": srv.ImagesViz, |
|
| 95 |
- "container_copy": srv.ContainerCopy, |
|
| 96 |
- "log": srv.Log, |
|
| 97 |
- "changes": srv.ContainerChanges, |
|
| 98 |
- "top": srv.ContainerTop, |
|
| 99 |
- "load": srv.ImageLoad, |
|
| 100 |
- "build": srv.Build, |
|
| 101 |
- "pull": srv.ImagePull, |
|
| 102 |
- "import": srv.ImageImport, |
|
| 103 |
- "image_delete": srv.ImageDelete, |
|
| 104 |
- "events": srv.Events, |
|
| 105 |
- "push": srv.ImagePush, |
|
| 106 |
- "containers": srv.Containers, |
|
| 89 |
+ "tag": srv.ImageTag, // FIXME merge with "image_tag" |
|
| 90 |
+ "info": srv.DockerInfo, |
|
| 91 |
+ "image_export": srv.ImageExport, |
|
| 92 |
+ "images": srv.Images, |
|
| 93 |
+ "history": srv.ImageHistory, |
|
| 94 |
+ "viz": srv.ImagesViz, |
|
| 95 |
+ "log": srv.Log, |
|
| 96 |
+ "changes": srv.ContainerChanges, |
|
| 97 |
+ "top": srv.ContainerTop, |
|
| 98 |
+ "load": srv.ImageLoad, |
|
| 99 |
+ "build": srv.Build, |
|
| 100 |
+ "pull": srv.ImagePull, |
|
| 101 |
+ "import": srv.ImageImport, |
|
| 102 |
+ "image_delete": srv.ImageDelete, |
|
| 103 |
+ "events": srv.Events, |
|
| 104 |
+ "push": srv.ImagePush, |
|
| 105 |
+ "containers": srv.Containers, |
|
| 107 | 106 |
} {
|
| 108 | 107 |
if err := job.Eng.Register(name, srv.handlerWrap(handler)); err != nil {
|
| 109 | 108 |
return job.Error(err) |