Enhancement of docker ps before and since filters
This enhancement is to fix the wrong list results on `docker ps` before and since filters specifying the non-running container. Fixes issue #20431 Signed-off-by: Wen Cheng Ma <wenchma@cn.ibm.com>
This commit is contained in:
parent
4c014296a1
commit
bc72883fe1
2 changed files with 25 additions and 17 deletions
|
@ -226,8 +226,24 @@ func (daemon *Daemon) foldFilter(config *types.ContainerListOptions) (*listConte
|
|||
// includeContainerInList decides whether a containers should be include in the output or not based in the filter.
|
||||
// It also decides if the iteration should be stopped or not.
|
||||
func includeContainerInList(container *container.Container, ctx *listContext) iterationAction {
|
||||
// Do not include container if it's in the list before the filter container.
|
||||
// Set the filter container to nil to include the rest of containers after this one.
|
||||
if ctx.beforeFilter != nil {
|
||||
if container.ID == ctx.beforeFilter.ID {
|
||||
ctx.beforeFilter = nil
|
||||
}
|
||||
return excludeContainer
|
||||
}
|
||||
|
||||
// Stop iteration when the container arrives to the filter container
|
||||
if ctx.sinceFilter != nil {
|
||||
if container.ID == ctx.sinceFilter.ID {
|
||||
return stopIteration
|
||||
}
|
||||
}
|
||||
|
||||
// Do not include container if it's stopped and we're not filters
|
||||
// FIXME remove the ctx.beforContainer part of the condition for 1.12 as --since and --before are deprecated
|
||||
// FIXME remove the ctx.beforContainer and ctx.sinceContainer part of the condition for 1.12 as --since and --before are deprecated
|
||||
if !container.Running && !ctx.All && ctx.Limit <= 0 && ctx.beforeContainer == nil && ctx.sinceContainer == nil {
|
||||
return excludeContainer
|
||||
}
|
||||
|
@ -267,22 +283,6 @@ func includeContainerInList(container *container.Container, ctx *listContext) it
|
|||
}
|
||||
}
|
||||
|
||||
// Do not include container if it's in the list before the filter container.
|
||||
// Set the filter container to nil to include the rest of containers after this one.
|
||||
if ctx.beforeFilter != nil {
|
||||
if container.ID == ctx.beforeFilter.ID {
|
||||
ctx.beforeFilter = nil
|
||||
}
|
||||
return excludeContainer
|
||||
}
|
||||
|
||||
// Stop iteration when the container arrives to the filter container
|
||||
if ctx.sinceFilter != nil {
|
||||
if container.ID == ctx.sinceFilter.ID {
|
||||
return stopIteration
|
||||
}
|
||||
}
|
||||
|
||||
// Stop iteration when the index is over the limit
|
||||
if ctx.Limit > 0 && ctx.idx == ctx.Limit {
|
||||
return stopIteration
|
||||
|
|
|
@ -64,6 +64,10 @@ func (s *DockerSuite) TestPsListContainersBase(c *check.C) {
|
|||
expected = []string{fourthID, secondID}
|
||||
c.Assert(assertContainerList(out, expected), checker.Equals, true, check.Commentf("SINCE filter: Container list is not in the correct order: \n%s", out))
|
||||
|
||||
out, _ = dockerCmd(c, "ps", "-f", "since="+thirdID)
|
||||
expected = []string{fourthID}
|
||||
c.Assert(assertContainerList(out, expected), checker.Equals, true, check.Commentf("SINCE filter: Container list is not in the correct order: \n%s", out))
|
||||
|
||||
// filter before
|
||||
out, _ = dockerCmd(c, "ps", "-f", "before="+fourthID, "-a")
|
||||
expected = []string{thirdID, secondID, firstID}
|
||||
|
@ -73,6 +77,10 @@ func (s *DockerSuite) TestPsListContainersBase(c *check.C) {
|
|||
expected = []string{secondID, firstID}
|
||||
c.Assert(assertContainerList(out, expected), checker.Equals, true, check.Commentf("BEFORE filter: Container list is not in the correct order: \n%s", out))
|
||||
|
||||
out, _ = dockerCmd(c, "ps", "-f", "before="+thirdID)
|
||||
expected = []string{secondID, firstID}
|
||||
c.Assert(assertContainerList(out, expected), checker.Equals, true, check.Commentf("SINCE filter: Container list is not in the correct order: \n%s", out))
|
||||
|
||||
// filter since & before
|
||||
out, _ = dockerCmd(c, "ps", "-f", "since="+firstID, "-f", "before="+fourthID, "-a")
|
||||
expected = []string{thirdID, secondID}
|
||||
|
|
Loading…
Reference in a new issue