2017-02-09 17 views
17

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

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

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

+2

я мог сделать Docker тянуть, а затем Grep хэш и сравнить, что каким-то образом. Но это было бы медленным, ресурсоемким и довольно хрупким. Я ожидаю, что там будет более надежное решение, но он не смог его найти. – vsjn3290ckjnaoij2jikndckjb

+0

Возможно, это может помочь: http://stackoverflow.com/questions/26423515/how-to-automatically-update-your-docker-containers-if-base-images-are-updated – lvthillo

+0

@ lorenzvth7 Хм, это кажется довольно взломанным , – vsjn3290ckjnaoij2jikndckjb

ответ

4

есть более API available для 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 

взгляда на объект истории of json вернулся, вы найдете созданный.

Тогда вы можете получить местный образ, созданный с даты

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

Сравните два и съеживаться прочь ...

+0

Итак, что именно могло бы предложить ваше решение? Завершить определенную конечную точку и сравнить результат с локальным изображением? – vsjn3290ckjnaoij2jikndckjb

+0

да, то есть (или была) идея. Я обновил ответ с дополнительной информацией ... – alebianco

+0

Спасибо за ответ. Хорошо, так что до сих пор все предлагаемые ответы довольно подвержены взлому, поэтому кажется, что пока еще нет хорошего способа сделать это. Открыл проблему в репозитории докеров, чтобы узнать, является ли это умышленной отсутствующей функцией: https://github.com/docker/docker/issues/30906 – vsjn3290ckjnaoij2jikndckjb

4

Если вы используете Docker Hub можно использовать Weebhook уведомить Docker хост об обновлении и принять меры по этому поводу.

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

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

+0

Так что в основном «вытягивание», если устаревший или нет, нелегко, и лучшее текущее решение - это нажать уведомление с сервера сборки или что-то подобное. Странно, что прежняя функциональность не существует. – vsjn3290ckjnaoij2jikndckjb

+0

вы всегда можете сделать «docker pull your/image: tag» и оценить, изменилось ли изображение, а затем удалить старый контейнер и запустить новый с обновленным изображением ... чтобы быть правдой, я не использую Docker Hub webhook или делать какие-либо проверки обновлений, я использую Deploybot или другую службу развертывания, которая будет запускать развертывание сервера, когда GitHub или Bitbucket уведомят его о смене владельца –

1

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

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

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

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