diff --git a/api/server/server.go b/api/server/server.go index ccccac450f..2ee9beee5e 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -1141,6 +1141,14 @@ func (s *Server) getContainersByName(version version.Version, w http.ResponseWri return fmt.Errorf("Missing parameter") } + if version.LessThan("1.19") { + containerJSONRaw, err := s.daemon.ContainerInspectRaw(vars["name"]) + if err != nil { + return err + } + return writeJSON(w, http.StatusOK, containerJSONRaw) + } + containerJSON, err := s.daemon.ContainerInspect(vars["name"]) if err != nil { return err diff --git a/api/types/types.go b/api/types/types.go index 6d0d7bca21..dd550050c8 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -195,12 +195,11 @@ type ContainerState struct { } // GET "/containers/{name:.*}/json" -type ContainerJSON struct { +type ContainerJSONBase struct { Id string Created time.Time Path string Args []string - Config *runconfig.Config State *ContainerState Image string NetworkSettings *network.Settings @@ -220,3 +219,24 @@ type ContainerJSON struct { ExecIDs []string HostConfig *runconfig.HostConfig } + +type ContainerJSON struct { + *ContainerJSONBase + Config *runconfig.Config +} + +// backcompatibility struct along with ContainerConfig +type ContainerJSONRaw struct { + *ContainerJSONBase + Config *ContainerConfig +} + +type ContainerConfig struct { + *runconfig.Config + + // backward compatibility, they now live in HostConfig + Memory int64 + MemorySwap int64 + CpuShares int64 + Cpuset string +} diff --git a/daemon/inspect.go b/daemon/inspect.go index fda4c30a93..c935c2b8cd 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -15,6 +15,40 @@ func (daemon *Daemon) ContainerInspect(name string) (*types.ContainerJSON, error container.Lock() defer container.Unlock() + base, err := daemon.getInspectData(container) + if err != nil { + return nil, err + } + + return &types.ContainerJSON{base, container.Config}, nil +} + +func (daemon *Daemon) ContainerInspectRaw(name string) (*types.ContainerJSONRaw, error) { + container, err := daemon.Get(name) + if err != nil { + return nil, err + } + + container.Lock() + defer container.Unlock() + + base, err := daemon.getInspectData(container) + if err != nil { + return nil, err + } + + config := &types.ContainerConfig{ + container.Config, + container.hostConfig.Memory, + container.hostConfig.MemorySwap, + container.hostConfig.CpuShares, + container.hostConfig.CpusetCpus, + } + + return &types.ContainerJSONRaw{base, config}, nil +} + +func (daemon *Daemon) getInspectData(container *Container) (*types.ContainerJSONBase, error) { // make a copy to play with hostConfig := *container.hostConfig @@ -50,12 +84,11 @@ func (daemon *Daemon) ContainerInspect(name string) (*types.ContainerJSON, error volumesRW[m.Destination] = m.RW } - contJSON := &types.ContainerJSON{ + contJSONBase := &types.ContainerJSONBase{ Id: container.ID, Created: container.Created, Path: container.Path, Args: container.Args, - Config: container.Config, State: containerState, Image: container.ImageID, NetworkSettings: container.NetworkSettings, @@ -76,7 +109,7 @@ func (daemon *Daemon) ContainerInspect(name string) (*types.ContainerJSON, error HostConfig: &hostConfig, } - return contJSON, nil + return contJSONBase, nil } func (daemon *Daemon) ContainerExecInspect(id string) (*execConfig, error) {