我有以下脚本来更新我的Nextcloud:
#!/bin/bash
set -ex
docker pull nextcloud
docker rm -f nextcloud
docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud
docker image prune -f问题是,即使出现了新的拉动,它也会创建新的容器。
我如何检查,是否docker pull真的提取了什么,或者我的图像是否已经是最新的?在这两种情况下,docker pull的退出代码都是0。
发布于 2018-08-01 07:48:14
您可以检查docker pull命令的输出:
#!/bin/bash
set -ex
out=$(docker pull nextcloud)
if [[ $out != *"up to date"* ]]; then
docker stop nextcloud
docker rm -f nextcloud
docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --
restart=unless-stopped nextcloud
docker image prune -f
fi发布于 2018-08-01 07:47:45
首先,如果没有指定标记,则意味着要提取最新版本。为了更清楚地说明,你可以:
#!/bin/bash
set -ex
docker pull nextcloud:latest
docker rm -f nextcloud
docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud:latest
docker image prune -f如果你想知道你是否提取了一个图像,我认为你说的是退出代码总是0是对的,不管是码头客拉一个新图像还是本地图像已经是最新的了。但是,您可以捕获Status: Image is up to date...或Status: Downloaded newer image...的停靠器拉命令和grep的输出。
类似于:
docker pull nextcloud:latest | grep "Image is up to date" && echo "Didn't downloaded anything" || echo "Downloaded new image"
把所有东西拼凑在一起:
#!/bin/bash
set -ex
docker pull nextcloud:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"
if [ "$pull_status" = "newly_pulled" ]; then
docker rm -f nextcloud
docker run -d -p 8080:80 -v nextcloud:/var/www/html --name nextcloud --restart=unless-stopped nextcloud:latest
docker image prune -f
fi发布于 2018-08-01 08:10:52
您可以获得本地可用版本的图像id,用于ex:
> docker image ls nginx:latest | awk '/nginx/ {print $3}'
> 649dcb69b782“最新”是默认使用的标记。
当您执行停靠器拉时,您可以再次使用该命令检查图像id是否已更改,然后采取相应的行动。
https://stackoverflow.com/questions/51627803
复制相似问题