diff --git a/api/client/stats.go b/api/client/stats.go index b79d3a5f3f..06ec3039df 100644 --- a/api/client/stats.go +++ b/api/client/stats.go @@ -61,10 +61,16 @@ func (s *containerStats) Collect(cli *DockerCli, streamStats bool) { u <- err return } - var ( + + var memPercent = 0.0 + var cpuPercent = 0.0 + + // MemoryStats.Limit will never be 0 unless the container is not running and we havn't + // got any data from cgroup + if v.MemoryStats.Limit != 0 { memPercent = float64(v.MemoryStats.Usage) / float64(v.MemoryStats.Limit) * 100.0 - cpuPercent = 0.0 - ) + } + previousCPU = v.PreCPUStats.CPUUsage.TotalUsage previousSystem = v.PreCPUStats.SystemUsage cpuPercent = calculateCPUPercent(previousCPU, previousSystem, v) diff --git a/api/server/container.go b/api/server/container.go index 6699b0f876..468fe55605 100644 --- a/api/server/container.go +++ b/api/server/container.go @@ -74,6 +74,16 @@ func (s *Server) getContainersStats(version version.Version, w http.ResponseWrit } stream := boolValueOrDefault(r, "stream", true) + + // If the container is not running and requires no stream, return an empty stats. + container, err := s.daemon.Get(vars["name"]) + if err != nil { + return err + } + if !container.IsRunning() && !stream { + return writeJSON(w, http.StatusOK, &types.Stats{}) + } + var out io.Writer if !stream { w.Header().Set("Content-Type", "application/json")