Docker – 检查私人registry映像版本

我需要使用哪些CLI命令来检查我的私人Dockerregistry中的图像是否比当前在我的服务器上运行的版本更新?

例如,我有一个使用docker run -d my.domain.com:5000/project1

我想知道它是否过时。

布朗尼指出@mbarthelemy和@amuino让我走上正轨。 从那以后,我能够想出下面的bash脚本,其他人可能会觉得有用。 它只是检查registry上的标签是否与当前正在执行的容器不同。

 #!/bin/bash # ensure running bash if ! [ -n "$BASH_VERSION" ];then echo "this is not bash, calling self with bash...."; SCRIPT=$(readlink -f "$0") /bin/bash $SCRIPT exit; fi REGISTRY="my.registry.com:5000" REPOSITORY="awesome-project-of-awesomeness" LATEST="`wget -qO- http://$REGISTRY/v1/repositories/$REPOSITORY/tags`" LATEST=`echo $LATEST | sed "s/{//g" | sed "s/}//g" | sed "s/\"//g" | cut -d ' ' -f2` RUNNING=`docker inspect "$REGISTRY/$REPOSITORY" | grep Id | sed "s/\"//g" | sed "s/,//g" | tr -s ' ' | cut -d ' ' -f3` if [ "$RUNNING" == "$LATEST" ];then echo "same, do nothing" else echo "update!" echo "$RUNNING != $LATEST" fi 

即使没有命令,也可以使用API​​检查registry上的标记,并与运行的内容进行比较。

 $ curl --silent my.domain.com:5000/v1/repositories//project1/tags | grep latest {"latest": "116f283e4f19716a07bbf48a562588d58ec107fe6e9af979a5b1ceac299c4370"} $ docker images --no-trunc my.domain.com:5000/project1 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE my.domain.com:5000 latest 64d935ffade6ed1cca3de1b484549d4d278a5ca62b31165e36e72c3e6ab8a30f 4 days ago 583.2 MB 

通过比较ID,你可以知道你没有运行最新版本。

我不知道这是否如广告中的作品。 只是一个简单的黑客我刚刚放在一起。 但是这至less会给你一点点推动,如何做到这一点。

 #!/bin/bash container=$1 imageid=$(docker inspect --format '{{.Config.Image}}' ${container}) echo "Running version from: $(docker inspect --format '{{.Created}}' ${container})" echo "Image version from: $(docker inspect --format '{{.Created}}' ${imageid})" 

示例输出:

 [root@server ~]# sh version_check.sh 9e500019b9d4 Running version from: 2014-05-30T08:24:08.761178656Z Image version from: 2014-05-01T16:48:24.163628504Z 

AFAIK,这是不可能的。

我看到的唯一的办法是拉registry来检查是否有一个新版本的图像(然后将有一个不同的ID比本地存储的图像):

 docker pull your/image:tag 

但是,是的,这意味着获取新的图像(如果有的话)。

如果您查看了registryAPI文档 ,您会发现如果您不介意脚本,可以在不实际下载图像的情况下获取此信息,通过获取图像标记并检查返回的ID标签与您使用相同标签的本地图片的ID相匹配。

话虽如此,有一些“检查更新”集成到docker CLI将是一个很好的补充。