Bashparsingdocker状态以检查本地图像是否是最新的

我在这里有一个起始的docker脚本:

#!/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的示例输出,如果图像在本地是最新的:

状态:图像是最新的我的例子registry:5050 /networking客户端:最新

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

在任何事情之前,通过docker pull检查本地映像是registry上可用的最新版本。 然后如果是最新的版本,继续停止并删除旧的容器操作,然后docker运行新的拉出的图像。

在这个脚本中,如何parsing状态来检查本地映像是否对应最新的registry可用?

也许docker司令可以做到这一点,但是我找不到有用的。

检查string“图像是最新”,以了解本地图像是否已更新:

 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 

简单的使用docker-compose,你可以删除以上所有。

docker-compose pull && docker-compose up

这将拉动图像,如果它存在,向上只会重新创build容器,如果它实际上有一个更新的图像,否则将不会