在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。

是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?


当前回答

如果你想要一个简单的AWK方法,这是我的看法:

docker rm -f $(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')

$(docker ps | awk '{if($2 == "<您的映像名称>"){print $NF}}') -根据输入的映像打印docker容器名称

列出所有的容器

awk '{if($2 == "<you -image-name>") {print $NF}}' - docker ps的第二列给出了图像名称。将其与图像名称进行比较将执行print $NF,打印容器名称。

Docker rm -f删除容器

例如,删除所有运行中的ubuntu镜像容器,可以简单地这样做:

docker rm -f $(docker ps | awk '{ if($2 == "ubuntu:latest") { print $NF}}')

PS:记得在AWK中包含图像标记,因为它是一个相等的比较器。

其他回答

之前的答案对我来说没用,但这个对我有用:

docker stop $(docker ps -q --filter ancestor=<image-name> )

如果你知道图像:标记准确的容器版本

以下是第8959期,一个好的开始是:

docker ps -a -q --filter="name=<containerName>"

因为name指的是容器而不是镜像名称,你需要使用最新的Docker 1.9过滤器祖先,在koekiebox的回答中提到过。

docker ps -a -q  --filter ancestor=<image-name>

正如下面kiril所评论的,要移除这些容器:

Stop也返回容器。

因此,链接stop和rm将完成工作:

docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))

如果你只知道图像名称(不知道image:tag)

Alex Jansen在评论中指出:

祖先选项不支持通配符匹配。

Alex提出了一个解决方案,但我设法运行的解决方案是,当您从同一个映像运行多个容器时(在您的~/。例如Bashrc):

dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }

然后我只是调用我的bash会话(在来源~/.bashrc之后):

dsi alpine

还有所有从阿尔卑斯出发的集装箱。*:xxx会停止。

含义:任何名称以alpine开头的图像。 你可能需要调整awk -v i="^$1。如果你想要^$1。更准确地说。

当然,从那里开始:

drmi() { docker rm $(dsi $1  | tr '\n' ' '); }

drmi alpine会停止并删除任何alpine:xxx容器。

我试图在gulp任务中包装我的Docker命令,并意识到你可以做以下事情:

docker stop container-name
docker rm container-name

这可能不适用于具有相同名称的多个容器的场景(如果可能的话),但对于我的用例来说,这是完美的。

如果你知道容器名称的一部分,你可以使用AWK与docker如下:

  CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /container.*/) {print $1}')
  if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
    echo "No containers available for deletion"
  else
    docker rm -f $CONTAINER_IDS
  fi

停止运行容器的两种方法:

1. $docker stop container_ID

2. $docker kill container_ID

您可以使用以下命令获取正在运行的容器:

$docker ps

以下链接可获取更多信息:

https://docs.docker.com/engine/reference/commandline/stop/ https://docs.docker.com/v1.8/reference/commandline/kill/