Docker: Как получить конкретный идентификатор сборки?

Я хотел бы всегда тянуть конкретную версию, а не только последнюю.

Случайный пример: https://registry.hub.docker.com/u/aespinosa/jenkins/builds_history/9511/

Я делаю это, потому что хочу развертывать только те версии, которые я проверил. Возможно ли это в настоящее время? Или я вынужден раскошелиться на них и сделать свой собственный?


person Sam    schedule 22.08.2014    source источник
comment
не уверен, что это сработает, но вы пробовали docker pull <your build id>?   -  person Jim Jeffries    schedule 22.08.2014
comment
Да, это не работает, к сожалению   -  person Sam    schedule 26.08.2014


Ответы (3)


Вы можете получить определенный изображение по дайджесту, используя следующий синтаксис:

docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2

Если вам нужно найти хэш, он выводится при нажатии/вытягивании изображения. Некоторые автоматизированные сборки выводят его в конце. Я попытался найти хэш с помощью docker inspect, но его там не оказалось, поэтому вам придется удалить изображение и снова вытащить его, чтобы просмотреть хэш.

person Joel B    schedule 21.11.2016
comment
Используя docker ce 17.05, я могу получить дайджест из локального образа: docker images --digest - person Patrice Tisserand; 06.04.2018
comment
или docker image inspect --format='{{index .RepoDigests 0}}' $IMAGE для определенного изображения - person protometa; 05.07.2018

Я делаю это так, чтобы пометить каждую сборку

docker build -t $NAMESPACE/$APP_NAME:$BUILD_SHA1 .
docker tag $NAMESPACE/$APP_NAME:$SHA1  $DOCKER_REGISTRY/$NAMESPACE/$APP_NAME:$SHA1
docker push $DOCKER_REGISTRY/$NAMESPACE/$APP_NAME:$SHA1

а затем вы тянете конкретный тег

docker pull $DOCKER_REGISTRY/$NAMESPACE/$APP_NAME:$SHA1
person fabrizioM    schedule 22.08.2014
comment
Так что, похоже, мне придется оставить себе вилку - person Sam; 26.08.2014
comment
Но теги не являются неизменяемыми, как это безопасно без неизменности? - person Leo Gallucci; 02.06.2015

В дополнение к ответу Джоэла вы можете убедиться, что образ существует в определенном репозитории Docker, прежде чем пытаться извлечь образ. Самый простой известный мне способ — использовать API реестра Docker. Сделайте простой запрос HTTP GET. Соберите строку следующим образом:

FullURL = DomainAndPort + "/v2/" + imageName + "/blobs/sha256:" + imageHash;

Пример запроса, который работает для меня в нашем сетевом репозитории -

Ввод этой строки в браузер Chrome возвращает объект JSON, описывающий изображение. Если вы введете недопустимый хэш sha256, API вернет -

{"errors":[{"code":"DIGEST_INVALID","message":"provided digest did not match uploaded content","detail":{}}]}

Дополнительные сведения см. в разделе Извлечение слоя в https://docs.docker.com/registry/spec/api/

person Jeremy Beale    schedule 21.07.2021