From c1f2abd89958a8731211ceb2885eed238a3bea8d Mon Sep 17 00:00:00 2001 From: LK4D4 Date: Tue, 18 Mar 2014 21:38:56 +0400 Subject: [PATCH] Using names in docker ps --since-id/--before-id, resolves #3565 Also renames --since-id/--before-id to --since/--before and add errors on non-existent containers. Docker-DCO-1.1-Signed-off-by: Alexandr Morozov (github: LK4D4) --- api/client.go | 4 ++-- contrib/completion/bash/docker | 9 +++------ contrib/completion/fish/docker.fish | 4 ++-- docs/sources/reference/commandline/cli.rst | 4 ++-- server/server.go | 23 +++++++++++++++++++--- 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/api/client.go b/api/client.go index 10dd9406dc..8f515639a7 100644 --- a/api/client.go +++ b/api/client.go @@ -1337,8 +1337,8 @@ func (cli *DockerCli) CmdPs(args ...string) error { all := cmd.Bool([]string{"a", "-all"}, false, "Show all containers. Only running containers are shown by default.") noTrunc := cmd.Bool([]string{"#notrunc", "-no-trunc"}, false, "Don't truncate output") nLatest := cmd.Bool([]string{"l", "-latest"}, false, "Show only the latest created container, include non-running ones.") - since := cmd.String([]string{"#sinceId", "-since-id"}, "", "Show only containers created since Id, include non-running ones.") - before := cmd.String([]string{"#beforeId", "-before-id"}, "", "Show only container created before Id, include non-running ones.") + since := cmd.String([]string{"#sinceId", "#-since-id", "-since"}, "", "Show only containers created since Id or Name, include non-running ones.") + before := cmd.String([]string{"#beforeId", "#-before-id", "-before"}, "", "Show only container created before Id or Name, include non-running ones.") last := cmd.Int([]string{"n"}, -1, "Show n last created containers, include non-running ones.") if err := cmd.Parse(args); err != nil { diff --git a/contrib/completion/bash/docker b/contrib/completion/bash/docker index 1449330986..e6a191d32b 100755 --- a/contrib/completion/bash/docker +++ b/contrib/completion/bash/docker @@ -392,11 +392,8 @@ _docker_port() _docker_ps() { case "$prev" in - --since-id|--before-id) - COMPREPLY=( $( compgen -W "$( __docker_q ps -a -q )" -- "$cur" ) ) - # TODO replace this with __docker_containers_all - # see https://github.com/dotcloud/docker/issues/3565 - return + --since|--before) + __docker_containers_all ;; -n) return @@ -407,7 +404,7 @@ _docker_ps() case "$cur" in -*) - COMPREPLY=( $( compgen -W "-q --quiet -s --size -a --all --no-trunc -l --latest --since-id --before-id -n" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "-q --quiet -s --size -a --all --no-trunc -l --latest --since --before -n" -- "$cur" ) ) ;; *) ;; diff --git a/contrib/completion/fish/docker.fish b/contrib/completion/fish/docker.fish index b0c5f38a96..9c4339fe2b 100644 --- a/contrib/completion/fish/docker.fish +++ b/contrib/completion/fish/docker.fish @@ -154,13 +154,13 @@ complete -c docker -A -f -n '__fish_seen_subcommand_from port' -a '(__fish_print # ps complete -c docker -f -n '__fish_docker_no_subcommand' -a ps -d 'List containers' complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -s a -l all -d 'Show all containers. Only running containers are shown by default.' -complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -l before-id -d 'Show only container created before Id, include non-running ones.' +complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -l before -d 'Show only container created before Id or Name, include non-running ones.' complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -s l -l latest -d 'Show only the latest created container, include non-running ones.' complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -s n -d 'Show n last created containers, include non-running ones.' complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -l no-trunc -d "Don't truncate output" complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -s q -l quiet -d 'Only display numeric IDs' complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -s s -l size -d 'Display sizes' -complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -l since-id -d 'Show only containers created since Id, include non-running ones.' +complete -c docker -A -f -n '__fish_seen_subcommand_from ps' -l since -d 'Show only containers created since Id or Name, include non-running ones.' # pull complete -c docker -f -n '__fish_docker_no_subcommand' -a pull -d 'Pull an image or a repository from the docker registry server' diff --git a/docs/sources/reference/commandline/cli.rst b/docs/sources/reference/commandline/cli.rst index dc6529ab6a..ebcf021115 100644 --- a/docs/sources/reference/commandline/cli.rst +++ b/docs/sources/reference/commandline/cli.rst @@ -967,13 +967,13 @@ new output from the container's stdout and stderr. List containers -a, --all=false: Show all containers. Only running containers are shown by default. - --before-id="": Show only container created before Id, include non-running ones. + --before="": Show only container created before Id or Name, include non-running ones. -l, --latest=false: Show only the latest created container, include non-running ones. -n=-1: Show n last created containers, include non-running ones. --no-trunc=false: Don't truncate output -q, --quiet=false: Only display numeric IDs -s, --size=false: Display sizes, not to be used with -q - --since-id="": Show only containers created since Id, include non-running ones. + --since="": Show only containers created since Id or Name, include non-running ones. Running ``docker ps`` showing 2 linked containers. diff --git a/server/server.go b/server/server.go index 93fc7b0bb1..e6243971a4 100644 --- a/server/server.go +++ b/server/server.go @@ -981,12 +981,27 @@ func (srv *Server) Containers(job *engine.Job) engine.Status { return nil }, -1) + var beforeCont, sinceCont *runtime.Container + if before != "" { + beforeCont = srv.runtime.Get(before) + if beforeCont == nil { + return job.Error(fmt.Errorf("Could not find container with name or id %s", before)) + } + } + + if since != "" { + sinceCont = srv.runtime.Get(since) + if sinceCont == nil { + return job.Error(fmt.Errorf("Could not find container with name or id %s", since)) + } + } + for _, container := range srv.runtime.List() { if !container.State.IsRunning() && !all && n <= 0 && since == "" && before == "" { continue } if before != "" && !foundBefore { - if container.ID == before || utils.TruncateID(container.ID) == before { + if container.ID == beforeCont.ID { foundBefore = true } continue @@ -994,8 +1009,10 @@ func (srv *Server) Containers(job *engine.Job) engine.Status { if n > 0 && displayed == n { break } - if container.ID == since || utils.TruncateID(container.ID) == since { - break + if since != "" { + if container.ID == sinceCont.ID { + break + } } displayed++ out := &engine.Env{}