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

Bash解析docker状态以检查本地映像是否是最新的,bash,docker,sh,Bash,Docker,Sh,我这里有一个起始docker脚本: #/usr/bin/env bash set-e echo'>>>获取旧容器id' CID=$(sudo docker ps—所有| grep“web客户端”| awk'{print$1}') echo$CID echo'>>>停止并删除旧容器' 如果[“$CID”!=”; 然后 sudo docker停止$CID sudo docker rm$CID fi echo'>>>启动新容器' sudo docker pull my example registry

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

#/usr/bin/env bash
set-e
echo'>>>获取旧容器id'
CID=$(sudo docker ps—所有| grep“web客户端”| awk'{print$1}')
echo$CID
echo'>>>停止并删除旧容器'
如果[“$CID”!=”;
然后
sudo docker停止$CID
sudo docker rm$CID
fi
echo'>>>启动新容器'
sudo docker pull my example registry.com:5050/web client:latest
SudoDocker运行--name=web客户端-p8080:80-dMyExampleRegistry.com:5050/web客户端:最新版本
事实上,此脚本具有umproper结果。每次运行脚本时,它都会删除旧容器

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

状态:的图像是最新的 我的示例注册表:5050/web客户端:最新

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

首先,通过docker pull检查本地映像是否是注册表中可用的最新版本。然后,如果是最新版本,继续停止并删除旧容器操作,docker运行新的拉取映像

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


也许docker命令可以做到这一点,但我没有找到一个有用的命令。

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

docker compose pull和&docker compose up

这将拉取映像(如果它存在),向上将仅重新创建容器(如果它实际具有较新的映像),否则它将不执行任何操作

检查字符串“image is-update”以了解本地映像是否已更新:

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