mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Added additional container information to "docker info".
Instead of just showing the number of containers this patch will show the number of running, paused and stopped containers as well. Signed-off-by: Kim Eik <kim@heldig.org>
This commit is contained in:
parent
db738dd77f
commit
a9804ab1cb
9 changed files with 79 additions and 0 deletions
|
@ -25,6 +25,9 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(cli.out, "Containers: %d\n", info.Containers)
|
fmt.Fprintf(cli.out, "Containers: %d\n", info.Containers)
|
||||||
|
fmt.Fprintf(cli.out, " Running: %d\n", info.ContainersRunning)
|
||||||
|
fmt.Fprintf(cli.out, " Paused: %d\n", info.ContainersPaused)
|
||||||
|
fmt.Fprintf(cli.out, " Stopped: %d\n", info.ContainersStopped)
|
||||||
fmt.Fprintf(cli.out, "Images: %d\n", info.Images)
|
fmt.Fprintf(cli.out, "Images: %d\n", info.Images)
|
||||||
ioutils.FprintfIfNotEmpty(cli.out, "Server Version: %s\n", info.ServerVersion)
|
ioutils.FprintfIfNotEmpty(cli.out, "Server Version: %s\n", info.ServerVersion)
|
||||||
ioutils.FprintfIfNotEmpty(cli.out, "Storage Driver: %s\n", info.Driver)
|
ioutils.FprintfIfNotEmpty(cli.out, "Storage Driver: %s\n", info.Driver)
|
||||||
|
|
|
@ -193,6 +193,9 @@ type Version struct {
|
||||||
type Info struct {
|
type Info struct {
|
||||||
ID string
|
ID string
|
||||||
Containers int
|
Containers int
|
||||||
|
ContainersRunning int
|
||||||
|
ContainersPaused int
|
||||||
|
ContainersStopped int
|
||||||
Images int
|
Images int
|
||||||
Driver string
|
Driver string
|
||||||
DriverStatus [][2]string
|
DriverStatus [][2]string
|
||||||
|
|
|
@ -54,9 +54,24 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) {
|
||||||
initPath := utils.DockerInitPath("")
|
initPath := utils.DockerInitPath("")
|
||||||
sysInfo := sysinfo.New(true)
|
sysInfo := sysinfo.New(true)
|
||||||
|
|
||||||
|
var cRunning, cPaused, cStopped int
|
||||||
|
for _, c := range daemon.List() {
|
||||||
|
switch c.StateString() {
|
||||||
|
case "paused":
|
||||||
|
cPaused++
|
||||||
|
case "running":
|
||||||
|
cRunning++
|
||||||
|
default:
|
||||||
|
cStopped++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
v := &types.Info{
|
v := &types.Info{
|
||||||
ID: daemon.ID,
|
ID: daemon.ID,
|
||||||
Containers: len(daemon.List()),
|
Containers: len(daemon.List()),
|
||||||
|
ContainersRunning: cRunning,
|
||||||
|
ContainersPaused: cPaused,
|
||||||
|
ContainersStopped: cStopped,
|
||||||
Images: len(daemon.imageStore.Map()),
|
Images: len(daemon.imageStore.Map()),
|
||||||
Driver: daemon.GraphDriverName(),
|
Driver: daemon.GraphDriverName(),
|
||||||
DriverStatus: daemon.layerStore.DriverStatus(),
|
DriverStatus: daemon.layerStore.DriverStatus(),
|
||||||
|
|
|
@ -21,6 +21,9 @@ For example:
|
||||||
|
|
||||||
$ docker -D info
|
$ docker -D info
|
||||||
Containers: 14
|
Containers: 14
|
||||||
|
Running: 3
|
||||||
|
Paused: 1
|
||||||
|
Stopped: 10
|
||||||
Images: 52
|
Images: 52
|
||||||
Server Version: 1.9.0
|
Server Version: 1.9.0
|
||||||
Storage Driver: aufs
|
Storage Driver: aufs
|
||||||
|
|
|
@ -192,6 +192,9 @@ These labels appear as part of the `docker info` output for the daemon:
|
||||||
|
|
||||||
$ docker -D info
|
$ docker -D info
|
||||||
Containers: 12
|
Containers: 12
|
||||||
|
Running: 5
|
||||||
|
Paused: 2
|
||||||
|
Stopped: 5
|
||||||
Images: 672
|
Images: 672
|
||||||
Server Version: 1.9.0
|
Server Version: 1.9.0
|
||||||
Storage Driver: aufs
|
Storage Driver: aufs
|
||||||
|
|
|
@ -28,6 +28,7 @@ type DockerSuite struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DockerSuite) TearDownTest(c *check.C) {
|
func (s *DockerSuite) TearDownTest(c *check.C) {
|
||||||
|
unpauseAllContainers()
|
||||||
deleteAllContainers()
|
deleteAllContainers()
|
||||||
deleteAllImages()
|
deleteAllImages()
|
||||||
deleteAllVolumes()
|
deleteAllVolumes()
|
||||||
|
|
|
@ -18,6 +18,9 @@ func (s *DockerSuite) TestInfoApi(c *check.C) {
|
||||||
stringsToCheck := []string{
|
stringsToCheck := []string{
|
||||||
"ID",
|
"ID",
|
||||||
"Containers",
|
"Containers",
|
||||||
|
"ContainersRunning",
|
||||||
|
"ContainersPaused",
|
||||||
|
"ContainersStopped",
|
||||||
"Images",
|
"Images",
|
||||||
"ExecutionDriver",
|
"ExecutionDriver",
|
||||||
"LoggingDriver",
|
"LoggingDriver",
|
||||||
|
|
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/integration/checker"
|
"github.com/docker/docker/pkg/integration/checker"
|
||||||
"github.com/docker/docker/utils"
|
"github.com/docker/docker/utils"
|
||||||
|
@ -17,6 +18,9 @@ func (s *DockerSuite) TestInfoEnsureSucceeds(c *check.C) {
|
||||||
stringsToCheck := []string{
|
stringsToCheck := []string{
|
||||||
"ID:",
|
"ID:",
|
||||||
"Containers:",
|
"Containers:",
|
||||||
|
" Running:",
|
||||||
|
" Paused:",
|
||||||
|
" Stopped:",
|
||||||
"Images:",
|
"Images:",
|
||||||
"Execution Driver:",
|
"Execution Driver:",
|
||||||
"OSType:",
|
"OSType:",
|
||||||
|
@ -101,3 +105,44 @@ func (s *DockerSuite) TestInfoDiscoveryAdvertiseInterfaceName(c *check.C) {
|
||||||
c.Assert(out, checker.Contains, fmt.Sprintf("Cluster store: %s\n", discoveryBackend))
|
c.Assert(out, checker.Contains, fmt.Sprintf("Cluster store: %s\n", discoveryBackend))
|
||||||
c.Assert(out, checker.Contains, fmt.Sprintf("Cluster advertise: %s:2375\n", ip.String()))
|
c.Assert(out, checker.Contains, fmt.Sprintf("Cluster advertise: %s:2375\n", ip.String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestInfoDisplaysRunningContainers(c *check.C) {
|
||||||
|
testRequires(c, DaemonIsLinux)
|
||||||
|
|
||||||
|
dockerCmd(c, "run", "-d", "busybox", "top")
|
||||||
|
out, _ := dockerCmd(c, "info")
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 1))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 0))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestInfoDisplaysPausedContainers(c *check.C) {
|
||||||
|
testRequires(c, DaemonIsLinux)
|
||||||
|
|
||||||
|
out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
|
||||||
|
cleanedContainerID := strings.TrimSpace(out)
|
||||||
|
|
||||||
|
dockerCmd(c, "pause", cleanedContainerID)
|
||||||
|
|
||||||
|
out, _ = dockerCmd(c, "info")
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 0))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 1))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestInfoDisplaysStoppedContainers(c *check.C) {
|
||||||
|
testRequires(c, DaemonIsLinux)
|
||||||
|
|
||||||
|
out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
|
||||||
|
cleanedContainerID := strings.TrimSpace(out)
|
||||||
|
|
||||||
|
dockerCmd(c, "stop", cleanedContainerID)
|
||||||
|
|
||||||
|
out, _ = dockerCmd(c, "info")
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 0))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 0))
|
||||||
|
c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 1))
|
||||||
|
}
|
||||||
|
|
|
@ -32,6 +32,9 @@ Here is a sample output:
|
||||||
|
|
||||||
# docker info
|
# docker info
|
||||||
Containers: 14
|
Containers: 14
|
||||||
|
Running: 3
|
||||||
|
Paused: 1
|
||||||
|
Stopped: 10
|
||||||
Images: 52
|
Images: 52
|
||||||
Server Version: 1.9.0
|
Server Version: 1.9.0
|
||||||
Storage Driver: aufs
|
Storage Driver: aufs
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue