diff --git a/daemon/mgr/container_stats.go b/daemon/mgr/container_stats.go index 70a09b9df..6422cc555 100644 --- a/daemon/mgr/container_stats.go +++ b/daemon/mgr/container_stats.go @@ -59,10 +59,15 @@ func (mgr *ContainerManager) StreamStats(ctx context.Context, name string, confi if err != nil { return err } - containerStat := toContainerStats(metrics.Timestamp, stats) - if err := enc.Encode(containerStat); err != nil { - return err + // metrics may be nil if the container is not running, + // so just ignore it and try get the metrics next time. + if metrics != nil { + containerStat := toContainerStats(metrics.Timestamp, stats) + + if err := enc.Encode(containerStat); err != nil { + return err + } } time.Sleep(DefaultStatsInterval) @@ -81,6 +86,11 @@ func (mgr *ContainerManager) Stats(ctx context.Context, name string) (*container ID := c.ID c.Unlock() + // only get metrics when the container is running + if !(c.IsRunning() || c.IsPaused()) { + return nil, nil, nil + } + metric, err := mgr.Client.ContainerStats(ctx, ID) if err != nil { return nil, nil, err