如何在Docker构建时删除所有关联的容器和映像

时间:2019-01-27 02:07:03

标签: image docker

我正在构建Docker映像,并且想知道是否存在一种快速的方法来删除从docker构建中构建的先前映像,并删除在Docker构建期间从该映像派生的任何先前渲染的容器。

我知道我可以通过使用祖先过滤器删除与图像关联的所有容器(正在运行或已停止)来单独执行此操作:

docker rm -f $(docker ps -a -q --filter="ancestor=<image id>")

我也了解如何删除关联的容器:

docker rmi <image id>

但是,在下一个docker构建期间执行两个步骤将是理想的选择。

2 个答案:

答案 0 :(得分:3)

  

但是,在下一个docker构建期间执行两个步骤将是理想的选择。

编写这些步骤的脚本将是一个简单的解决方案,因为docker image build本身没有这些图像清除选项。

然后您可以将return await step.prompt(PRODUCTS_CAROUSEL, { prompt: productOptions, choices: items.map((p: Product) => p.id), }); 添加到docker构建中,以确保重建所有内容。

答案 1 :(得分:0)

解决方案

  1. 将以下内容添加到您的〜/ .bashrc或〜/ .zshrc中
  2. 源〜/ .bashrc(或将函数放在下面的文件)

删除图片和所有关联的容器

rem_image 14a7ba8dc2c0

**按图案删除所有图像**

docker_clean <PATTERN>

例如删除所有没有名称的图像(它们通常在构建步骤中失败)

docker images | grep none
<none>                                                <none>              e4205cbdcbd6        2 months ago        1.64GB
<none>                                                <none>              e5a21ccf4b6d        2 months ago        1.73GB
<none>                                                <none>              bd9b2ddf1a06        2 months ago        1.64GB
<none>                                                <none>              f7d08c6c4660        2 months ago        1.73GB
<none>                                                <none>              4bca4e8a7059        2 months ago        1.64GB
<none>                                                <none>              ab028586385c        2 months ago        1.73GB

docker_clean none

代码

function rem_image() {
  image_id=$1
  
  docker rm -f $(docker ps -a -q --filter="ancestor=$image_id") 2>&- || echo "Found no containers for that image"
  docker rmi $image_id
  echo "Image deleted successfully"
}

function docker_clean() {
  pattern=$1

  for image_id in `docker images | grep $pattern | awk '{ print $3}'`
  do
      echo Removing... $image_id
      rem_image $image_id
  done
}