Bash解析docker状态以检查本地映像是否是最新的

时间:2017-06-24 18:16:01

标签: bash docker sh

我在这里有一个起始泊坞脚本:

#!/usr/bin/env bash
set -e

echo '>>> Get old container id'
CID=$(sudo docker ps --all | grep "web-client" | awk '{print $1}')
echo $CID


echo '>>> Stopping and deleting old container'
if [ "$CID" != "" ];
then
  sudo docker stop $CID
  sudo docker rm $CID
fi


echo '>>> Starting new container'
sudo docker pull my-example-registry.com:5050/web-client:latest
sudo docker run --name=web-client -p 8080:80 -d my-example-registry.com:5050/web-client:latest

事实是这个脚本有更好的结果。每次运行脚本时它都会删除旧容器。

“启动新容器”部分将提取最新图像。如果图像本地是最新的,则以下是docker pull的示例输出:

  

状态:图片是最新的   我-例如,注册表:5050 / Web的客户端:最新

有没有办法通过添加条件来改进我的脚本:

在此之前,通过docker check检查本地映像是注册表中可用的最新版本。然后,如果它是最新版本,请继续停止并删除旧容器操作,并且docker运行新的拉出图像。

在此脚本中,如何解析状态以检查本地图像是否对应于注册表中最新的?

也许docker命令可以解决问题,但我找不到有用的命令。

2 个答案:

答案 0 :(得分:5)

检查字符串“Image is up-date”以了解本地图像是否已更新:

sudo docker pull my-example-registry.com:5050/web-client:latest | 
   grep "Image is up to date" ||
   (echo Already up to date. Exiting... && exit 0)

所以将脚本更改为:

#!/usr/bin/env bash
set -e

sudo docker pull my-example-registry.com:5050/web-client:latest | 
   grep "Image is up to date" ||
   (echo Already up to date. Exiting... && exit 0)


echo '>>> Get old container id'
CID=$(sudo docker ps --all | grep "web-client" | awk '{print $1}')
echo $CID


echo '>>> Stopping and deleting old container'
if [ "$CID" != "" ];
then
  sudo docker stop $CID
  sudo docker rm $CID
fi


echo '>>> Starting new container'
sudo docker run --name=web-client -p 8080:80 -d my-example-registry.com:5050/web-client:latest

答案 1 :(得分:1)

简单使用docker-compose,您可以删除以上所有内容。

docker-compose pull && docker-compose up

这将拉出图像,如果它存在,并且只有重新创建容器,如果它实际上有一个更新的图像,否则它将什么都不做