Filter containers by status.

A continuation of #7616.
Adds `docker ps --filter=status=(restarting|running|paused|stopped)` option.

Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <jess@docker.com> (github: jfrazelle)
Upstream-commit: ea09f036824aee74112a75ac99579ae4f10251b5
Component: engine
This commit is contained in:
Jessica Frazelle
2014-09-29 20:11:19 -07:00
parent ad2a93f102
commit ce150ab801
5 changed files with 78 additions and 8 deletions
+8
View File
@@ -28,6 +28,7 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
size = job.GetenvBool("size")
psFilters filters.Args
filt_exited []int
filt_status []string
)
outs := engine.NewTable("Created", 0)
@@ -45,6 +46,8 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
}
}
filt_status, _ = psFilters["status"]
names := map[string][]string{}
daemon.ContainerGraph().Walk("/", func(p string, e *graphdb.Entity) error {
names[e.ID()] = append(names[e.ID()], p)
@@ -99,6 +102,11 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
return nil
}
}
for _, status := range filt_status {
if container.State.StateString() != strings.ToLower(status) {
return nil
}
}
displayed++
out := &engine.Env{}
out.Set("Id", container.ID)
+14
View File
@@ -46,6 +46,20 @@ func (s *State) String() string {
return fmt.Sprintf("Exited (%d) %s ago", s.ExitCode, units.HumanDuration(time.Now().UTC().Sub(s.FinishedAt)))
}
// StateString returns a single string to describe state
func (s *State) StateString() string {
if s.Running {
if s.Paused {
return "paused"
}
if s.Restarting {
return "restarting"
}
return "running"
}
return "exited"
}
func wait(waitChan <-chan struct{}, timeout time.Duration) error {
if timeout < 0 {
<-waitChan