docker - 检测 Docker 镜像是否会在运行构建时发生变化

标签 docker

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

docker build -t myimage .

一旦此命令成功,则重新运行它是无操作的,因为 Dockerfile 指定的图像没有改变。有没有办法检测 Dockerfile (或构建上下文文件之一)随后更改而无需重新运行此命令?

最佳答案

看着 docker inspect $image_name从一个构建到另一个构建,如果 docker 镜像没有改变,一些信息不会改变。其中之一是 docker Id .所以,我使用了 Id检查 docker 是否已更改的信息如下:

首先,可以得到图像Id如下:

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

然后,要检查构建后是否有更改,您可以按照以下步骤操作:
  • 获取构建前的图像 ID
  • 构建镜像
  • 获取构建后的图像 ID
  • 比较两个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
    

    关于docker - 检测 Docker 镜像是否会在运行构建时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316996/

    相关文章:

    docker - 如何检查 nvidia-docker 版本?

    Docker 信任初始化

    docker - Docker Solr无法加载我从其他Solr转移来的内核

    docker - 如何在Docker环境中的根目录(/)中创建安装配置

    docker - 不允许使用 docker + systemctl 操作 systemctl

    django - Vagrant 托管的 docker 容器无法启动

    wordpress - 无法通过 HTTPS 访问 WordPress docker 容器的静态文件

    php - fatal error :未捕获错误:调用未定义函数mysqli_connect()

    postgresql - 如何将 pgadmin 容器连接到主机系统 localhost postgres

    docker - docker 镜像名称是什么,名称是否唯一?