【问题标题】:How do I write a script that kills a docker container?如何编写杀死 docker 容器的脚本?
【发布时间】:2019-09-07 06:59:45
【问题描述】:

我编写了一个脚本来构建和运行一个 docker 容器:

docker build --rm -t 'mine' . && docker run -p 3000:3000 -it 'mine'

如果我连续运行两次,前一个已经在运行,所以它不会启动。为了解决这个问题,我写了一行来杀死所有的 docker 容器:

docker kill $(docker ps -q) || true
docker build --rm -t 'mine' . && docker run -p 3000:3000 -it 'mine'

这可行,但现在我的机器上有多个使用 docker 的项目,这会杀死所有项目,这不是我想要的。我只希望它杀死这个项目中的 docker 容器。

如何修改此脚本,使其仅终止在第二行启动的 docker 容器?

【问题讨论】:

  • Kill a Docker Container的可能重复
  • @jeremysprofile 我会说这不是骗子,因为答案是这样的:“然后复制正在运行的容器的 CONTAINER ID 并执行以下命令”。我想在脚本中完成这一切
  • @DanielKaplan,我会说这是一个骗局,因为如果您再向下滚动一个答案,就会有另一个答案是 docker kill container_name。在您的情况下,它将是 docker kill mine
  • @jeremysprofile 实际上,我试过了,但没有成功。我不说docker kill mine,我说docker kill container_name,我必须从docker container ls 那里得到。因此,我认为这不是同一个问题。我要求一个单行脚本来完成所有这些步骤,而不是一系列手动步骤。

标签: bash docker


【解决方案1】:

您应该提供一个容器名称,以便您可以按名称杀死它。您还必须使用--rm,以便下次轻松重启:

1号航站楼:

docker run -it --rm --name killMe alpine:latest /bin/sh

2号航站楼:

docker container ls
> CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
> 0113b3fea7dd        alpine:latest       "/bin/sh"           19 seconds ago      Up 18 seconds                           killMe

docker kill killMe
# the container in my first terminal is now stopped
docker run -it --rm --name killMe alpine:latest /bin/sh
# it started again

【讨论】:

    【解决方案2】:

    我想出了这个:

    docker kill $(docker container ls | tail -1 | awk '$0 ~ /mine/ {print $NF}')
    

    让我们先从$(...) 开始。它说,列出容器,切断标题,打印任何包含mine 的行的最后一列(我的容器标签的名称)。最后一列是容器的名称。

    我把这个结果传递给docker kill <result>。如果有多个运行容器中包含mine,这可能不起作用,但由于我不能同时运行两个容器,我可以接受这个限制。

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2019-06-03
      • 2013-07-24
      相关资源
      最近更新 更多