github.com/fcwu/docker@v1.4.2-0.20150115145920-2a69ca89f0df/daemon/inspect.go (about) 1 package daemon 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/docker/docker/engine" 8 "github.com/docker/docker/runconfig" 9 ) 10 11 func (daemon *Daemon) ContainerInspect(job *engine.Job) engine.Status { 12 if len(job.Args) != 1 { 13 return job.Errorf("usage: %s NAME", job.Name) 14 } 15 name := job.Args[0] 16 if container := daemon.Get(name); container != nil { 17 container.Lock() 18 defer container.Unlock() 19 if job.GetenvBool("raw") { 20 b, err := json.Marshal(&struct { 21 *Container 22 HostConfig *runconfig.HostConfig 23 }{container, container.hostConfig}) 24 if err != nil { 25 return job.Error(err) 26 } 27 job.Stdout.Write(b) 28 return engine.StatusOK 29 } 30 31 out := &engine.Env{} 32 out.SetJson("Id", container.ID) 33 out.SetAuto("Created", container.Created) 34 out.SetJson("Path", container.Path) 35 out.SetList("Args", container.Args) 36 out.SetJson("Config", container.Config) 37 out.SetJson("State", container.State) 38 out.Set("Image", container.ImageID) 39 out.SetJson("NetworkSettings", container.NetworkSettings) 40 out.Set("ResolvConfPath", container.ResolvConfPath) 41 out.Set("HostnamePath", container.HostnamePath) 42 out.Set("HostsPath", container.HostsPath) 43 out.SetJson("Name", container.Name) 44 out.SetInt("RestartCount", container.RestartCount) 45 out.Set("Driver", container.Driver) 46 out.Set("ExecDriver", container.ExecDriver) 47 out.Set("MountLabel", container.MountLabel) 48 out.Set("ProcessLabel", container.ProcessLabel) 49 out.SetJson("Volumes", container.Volumes) 50 out.SetJson("VolumesRW", container.VolumesRW) 51 out.SetJson("AppArmorProfile", container.AppArmorProfile) 52 53 out.SetList("ExecIDs", container.GetExecIDs()) 54 55 if children, err := daemon.Children(container.Name); err == nil { 56 for linkAlias, child := range children { 57 container.hostConfig.Links = append(container.hostConfig.Links, fmt.Sprintf("%s:%s", child.Name, linkAlias)) 58 } 59 } 60 61 out.SetJson("HostConfig", container.hostConfig) 62 63 container.hostConfig.Links = nil 64 if _, err := out.WriteTo(job.Stdout); err != nil { 65 return job.Error(err) 66 } 67 return engine.StatusOK 68 } 69 return job.Errorf("No such container: %s", name) 70 } 71 72 func (daemon *Daemon) ContainerExecInspect(job *engine.Job) engine.Status { 73 if len(job.Args) != 1 { 74 return job.Errorf("usage: %s ID", job.Name) 75 } 76 id := job.Args[0] 77 eConfig, err := daemon.getExecConfig(id) 78 if err != nil { 79 return job.Error(err) 80 } 81 82 b, err := json.Marshal(*eConfig) 83 if err != nil { 84 return job.Error(err) 85 } 86 job.Stdout.Write(b) 87 return engine.StatusOK 88 }