проверьте, доступна ли более новая версия изображения докера

У меня есть частный репозиторий докера, и я хочу проверить, доступна ли более новая версия изображения докера или нет. Я попробовал:

curl -kvu "myuser:mypasswd" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X HEAD https://myrepo:5000/v2/myimage/manifests/i386  

Я получил ответ как это:

< HTTP/1.1 200 OK
< Content-Length: 9080
< Content-Type: application/vnd.docker.distribution.manifest.v2+json
< Docker-Content-Digest: sha256:5891d3d01fcdb5ec7dc8a27f25360b132510c7b92369ad50926c27ca7d7cfacf
< Docker-Distribution-Api-Version: registry/2.0
< Etag: "sha256:5891d3d01fcdb5ec7dc8a27f25360b132510c7b92369ad50926c27ca7d7cfacf"
< X-Content-Type-Options: nosniff

Которым поле в заголовке ответа должно быть по сравнению с локальными метаданными изображения?

0
задан 11 September 2017 в 02:45

2 ответа

curl -kvu "myuser:mypasswd" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X HEAD https://myrepo:5000/v2/myimage/manifests/<tag>

возвратит ответ как это:

< HTTP/1.1 200 OK
< Content-Length: 9080
< Content-Type: application/vnd.docker.distribution.manifest.v2+json
< Docker-Content-Digest: sha256:5891d3d01fcdb5ec7dc8a27f25360b132510c7b92369ad50926c27ca7d7cfacf
< Docker-Distribution-Api-Version: registry/2.0
< Etag: "sha256:5891d3d01fcdb5ec7dc8a27f25360b132510c7b92369ad50926c27ca7d7cfacf"
< X-Content-Type-Options: nosniff

Docker-Content-Digest: поле должно быть проверено по digest из локального изображения

docker images --digests myrepo:5000/myimage
REPOSITORY                         TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
myrepo:5000/myimage   i386                sha256:5891d3d01fcdb5ec7dc8a27f25360b132510c7b92369ad50926c27ca7d7cfacf   b9e9c7f4a462        6 days ago          491 MB

docker images --digests myrepo:5000/myimage, Должен быть выполнен без тега (i386 в этом случае)

Если несоответствия обзоров, то существует более новая версия доступного изображения. Так в основном, Вы проверяете обзор удаленного и локальное изображение. Если они не сочетаются, более новая версия доступна.

1
ответ дан 2 November 2019 в 07:06

Вот готовый к использованию сценарий оболочки для проверки его по Реестру Докера GitLab.

set -e

GITLAB_SERVER="xxx.example.com"
REGISTRY_SERVER="$GITLAB_SERVER:5001"
IMAGE="group/subgroup1/subgroup2/project/image"

AUTH=$(jq -r ".auths.\"$REGISTRY_SERVER\".auth" ~/.docker/config.json | base64 -d)  # WARN: on OSX base64 -D not -d
TOKEN=$(curl -u "$AUTH" "https://$GITLAB_SERVER/jwt/auth?client_id=docker&offline_token=true&service=container_registry&scope=repository:$IMAGE:push,pull" | jq -r .token)
REMOTE_SHA=$(curl -fH "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -I https://$REGISTRY_SERVER/v2/$IMAGE/manifests/latest | grep Docker-Content-Digest | awk '{print $2}')
LOCAL_SHA=$(docker inspect "$REGISTRY_SERVER/${IMAGE}:latest"  -f '{{index .Id}}')

echo "Local:  $LOCAL_SHA"
echo "Remote: $REMOTE_SHA" 

if [[ "$LOCAL_SHA" == "$REMOTE_SHA" ]]; then
  echo "$IMAGE up-to-date"
else
  echo "$IMAGE outdated"
fi
0
ответ дан 2 November 2019 в 07:06

Другие вопросы по тегам:

Похожие вопросы: