仅在自上次构建

时间:2018-05-31 13:46:29

标签: docker dockerfile

假设我们有一个dockerfile,其中包含一个指向BaseImage的基本图像指令:

FROM BaseImage
...

有没有什么方法可以检测自上次构建以来BaseImage是否已被修改,所以我们可以避免再次构建图像​​?

1 个答案:

答案 0 :(得分:0)

之前有一个问题类似于问“How to automatically update your docker containers, if base-images are updated”。

没有标准方法,但回答(bsuttor)的用户提交了他用来检查Docker仓库中基本映像更新的脚本:

  

我们使用一个脚本来检查正在运行的容器是否以最新映像启动。我们还使用upstart init脚本来启动docker镜像。

#!/usr/bin/env bash
set -e
BASE_IMAGE="registry"
REGISTRY="registry.hub.docker.com"
IMAGE="$REGISTRY/$BASE_IMAGE"
CID=$(docker ps | grep $IMAGE | awk '{print $1}')
docker pull $IMAGE

for im in $CID
do
    LATEST=`docker inspect --format "{{.Id}}" $IMAGE`
    RUNNING=`docker inspect --format "{{.Image}}" $im`
    NAME=`docker inspect --format '{{.Name}}' $im | sed "s/\///g"`
    echo "Latest:" $LATEST
    echo "Running:" $RUNNING
    if [ "$RUNNING" != "$LATEST" ];then
        echo "upgrading $NAME"
        stop docker-$NAME
        docker rm -f $NAME
        start docker-$NAME
    else
        echo "$NAME up to date"
    fi
done
  

init看起来像

docker run -t -i --name $NAME $im /bin/bash