检测Docker映像是否会在运行的构建中更改

Ric*_*ook 3 docker

我正在使用如下命令行来构建Docker映像:

docker build -t myimage .
Run Code Online (Sandbox Code Playgroud)

成功执行此命令后,将不再运行它,因为所指定的映像Dockerfile未更改。有没有一种方法可以检测Dockerfile(或其中一个构建上下文文件)随后是否更改而无需重新运行此命令?

ldg*_*ldg 8

dry-run如果这就是您正在寻找的,则没有其他选择。您可以使用不同的标签来避免影响现有图像并在输出中查找---> Using cache(如果不需要,则删除该标签)。


Moh*_*OUI 8

看着docker inspect image_name从一个构建到另一个,如果码头工人形象并没有改变一些信息也不会改变。其中之一是码头工人Id。因此,我使用该Id信息来检查泊坞窗是否已更改,如下所示。首先,可以得到Id如下图像:

docker inspect --format {{.Id}} docker_image_name
Run Code Online (Sandbox Code Playgroud)

要验证构建后是否有更改,可以按照以下步骤操作:

  1. 在构建之前获取图像ID
  2. 建立形象
  3. 构建后获取图像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
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法确定“docker build”是否会在实际构建的情况下生成新映像? (6认同)