inspect.go 2.4 KB

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