检测Docker镜像是否会在运行构build中更改

我正在使用如下命令行构build一个Docker镜像:

docker build -t myimage . 

一旦这个命令成功,然后重新运行它是一个无操作,由Dockerfile指定的图像没有改变。 有没有办法检测Dockerfile (或其中一个构build上下文文件)是否随后更改,而无需重新运行此命令?

如果这是你正在寻找的,没有一个dry-run选项。 您可以使用不同的标签,以避免影响现有的图像,并寻找---> Using cache在输出中---> Using cache (然后删除标签,如果你不想要的话)。

查看docker inspect image_name从一个构build到另一个,如果docker图像没有改变,几个信息不会改变。 其中之一是dockerId 。 所以,我使用Id信息来检查docker是否被改变如下。 首先,可以得到如下的图像Id

 docker inspect --format {{.Id}} docker_image_name 

要validation构build之后是否有更改,可以执行以下步骤:

  1. 在构build之前获取图像ID
  2. build立形象
  3. 在构build之后获取图像ID
  4. 比较这两个ID,如果他们匹配没有变化,如果他们没有太多,就有一个变化。

具体来说,这里是一个工作bash的例子

 docker inspect --format {{.Id}} docker_image_name > deploy/last_image_build_id.log # I get the docker last image id from a file last_docker_id=$(cat deploy/last_image_build_id.log) docker build -t docker_image_name . docker_id_after_build=$(docker inspect --format {{.Id}} docker_image_name if [ "$docker_id_after_build" != "$last_docker_id" ]; then echo "image changed" else echo "image didn't change" fi