我在这里有一个启动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
Run Code Online (Sandbox Code Playgroud)
事实是这个脚本有更好的结果.每次运行脚本时,它都会删除旧容器.
"启动新容器"部分将提取最新图像.如果图像本地是最新的,这是docker pull的示例输出:
状态:图像是my-example-registry的最新版本:5050/web-client:latest
有没有办法通过添加条件来改进我的脚本:
在此之前,通过docker check检查本地映像是注册表中可用的最新版本.然后,如果它是最新版本,请继续停止并删除旧容器操作,并且docker运行新的拉出图像.
在此脚本中,如何解析状态以检查本地映像是否对应于注册表中最新的?
也许docker命令可以做到这一点,但我找不到有用的命令.
检查字符串"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)
Run Code Online (Sandbox Code Playgroud)
所以将脚本更改为:
#!/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |