Как проверить, устарело ли мое локальное изображение докеров, не нажав откуда-то еще?

Я запускаю приложение для реагирования в контейнере докеров, на сервере Coreos. Скажем, он был вытащен из докер-хаба из https://hub.docker.com/r/myimages/myapp.

Теперь я хочу периодически проверять, обновлено ли изображение dockerhub для контейнера приложения, чтобы увидеть, позади ли изображение, которое я запускаю локально.

Каким будет наиболее эффективный способ проверить, устарело ли местное изображение докеров по сравнению с удаленным изображением? Все решения, которые я нашел до сих пор, - это bash скрипты или внешние службы, которые нажимают на обновление. Я хотел бы найти решение, которое является как можно более родным для докеров, и хотел бы воздержаться от нажатия уведомления из другого места (чтобы предупредить сервер об обновленном изображении).

Ответы

Ответ 1

Если вы используете Docker Hub, вы можете использовать Webhook, чтобы уведомить хост докера об обновлении и предпринять необходимые действия.

Использование webhook было бы "простым" способом сделать это (я думаю), в противном случае вам пришлось бы выполнять какое-то сканирование в доке, или, как объясняет @alebianco, сравнивая некоторые хэши или даты сборки/создания.

Вот документы об этом: https://docs.docker.com/docker-hub/webhooks/

Ответ 2

существует API, доступный для Docker Hub

Вы должны иметь возможность получить список тегов, а оттуда детали манифеста


изменить

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

Самая близкая вещь, которую я нашел, - это дата создания... которую я бы не предлагал использовать, если вы пытаетесь сделать что-то удаленно.

В любом случае вам нужно сначала получить токен доступа

curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull"

извлеките токен из ответа, затем вы можете загрузить манифест версии изображения

curl --header "Authorization: Bearer $TOKEN" https://index.docker.io/v2/library/ubuntu/manifests/latest

Посмотрите на объект истории возвращаемого json, вы найдете созданное свойство.

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

docker inspect --format "{{json .Created}}" ubuntu:latest

Сравните двух и съедайтесь...

Ответ 3

Я решил эту проблему с помощью искателя, который проверяет непосредственно файл Dockerfile или строку from.

Я полностью поддержал изображение докеров, которое можно было найти в .

Я просто запускаю изображение в моем конвейере gitlab ci. Если базовое изображение устарело, он печатает все более новые версии, чтобы вы могли легко выбрать тег.

Ссылка: https://hub.docker.com/r/olafnorge/docker-image-crawler/