Как я могу автоматически обновить полное описание в Docker Hub?

Я использую Travis CI для создания образов Docker из Dockerfiles, а затем в случае успеха загружаю их в Docker Hub.

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

Поскольку я могу обновить описание в будущем, я хочу, чтобы Travis CI автоматически обновлял описание на основе файла MD в репозитории с новым изображением.

Кто-нибудь знает, как это сделать?


person NEO    schedule 10.01.2016    source источник


Ответы (7)


Поскольку Docker Hub не предоставляет никакого API, единственный способ удаленная отправка материалов в Docker Hub осуществляется с помощью команды docker push, и это ограничивает использование для отправки изображений.

С другой стороны, если вы позволите службе Docker Hub создать образ для вас из репозитория Github или Bitbucket, то Docker Hub обновит подробное описание, взяв содержимое файла README.md, найденного в этом репозитории. См. раздел Понимание процесса сборки в Docker. Документация Hub по автоматической сборке.

Это означает, что вы размещаете файлы Dockerfile и README.md на Github или Bitbucket.


Если вам действительно нужно сначала создать свой образ на TravisCI (возможно, потому, что вы также запускаете автоматические тесты на построенном образе), вы можете настроить TravisCI на запуск веб-перехватчика на Docker Hub, чтобы сообщить Docker Hub о сборке образа после того, как TravisCI определит, что он прошел проверку. тесты.

Для этого в Docker Hub настройте свой образ так же, как для автоматической сборки (следовательно, свяжите проект Github или Bitbucket), но отключите автоматическую функцию:

Настройки сборки проекта Docker Hub

Затем прокрутите страницу Настройки сборки вниз до раздела Триггер сборки и скопируйте URL-адрес триггера:

Триггер сборки проекта Docker Hub

Теперь отредактируйте файл .travis.yml и добавьте следующий блок (обратите внимание на заполнители <your account> и <your image>):

after_success:
# notify Docker Hub to make a new build
- >
  [ "$TRAVIS_BRANCH" == "master" ]
  && curl -X POST -H "Content-Type: application/json"
  --data '{"docker_tag_name": "latest"}'
  https://registry.hub.docker.com/u/<your account>/<your image>/trigger/$DOCKER_HUB_TOKEN/

Затем перейдите на страницу своего проекта на сайте Travis CI и откройте настройки проекта:

Настройки проекта Travis CI

И добавьте переменную среды DOCKER_HUB_TOKEN в свой проект Travis CI со значением токена триггера, найденным на странице настроек сборки Docker Hub:

Переменные среды проекта Travis CI

Вам по-прежнему понадобится репозиторий Github или Bitbucket, связанный с вашим проектом Docker Hub, но Travis CI будет тем, кто проинструктирует Docker Hub, когда собирать ваш образ.

person Thomasleveil    schedule 10.01.2016
comment
Да, я знаю об Automated Builds, но я хочу использовать Travis CI, чтобы я также мог провести кучу тестов. Есть ли другой способ или я должен просто написать скрипт, работающий как браузер и меняющий описание на странице Docker Hub? - person NEO; 11.01.2016
comment
@NEO Это можно сделать, настройка сложнее, но я постараюсь объяснить это понятно → ответ отредактирован - person Thomasleveil; 11.01.2016
comment
На самом деле это хорошая идея. Но что мне делать, если я хочу запустить несколько сборок? Теперь я использую функцию матрицы построения Travis CI для создания нескольких изображений, просто изменяя некоторые переменные env. Можно ли запускать сборки для каждой строки матрицы? - person NEO; 15.01.2016
comment
Вы не можете, Docker Hub понятия не имеет о TravisCI. Эти настройки матрицы известны только TravisCI. Что можно сделать с помощью Docker Hub, так это создать разные ветки вашего репозитория и назначить разные теги образам, созданным из них. См. docs.docker.com/docker-hub/images/create-dialog. .png в Build Settings - person Thomasleveil; 15.01.2016
comment
Docker Hub предоставляет API. Я думаю, что они просто не рекламируют это и не предоставляют официальную документацию. Это хорошая эталонная реализация, которую я использовал в прошлом. github.com/RyanTheAllmighty/Docker-Hub-API - person peterevans; 20.09.2019

На самом деле, вы можете обновить его с помощью API.

local code=$(jq -n --arg msg "$(<README.md)" \
    '{"registry":"registry-1.docker.io","full_description": $msg }' | \
        curl -s -o /dev/null  -L -w "%{http_code}" \
           https://cloud.docker.com/v2/repositories/"${image}"/ \
           -d @- -X PATCH \
           -H "Content-Type: application/json" \
           -H "Authorization: JWT ${token}")

Подробнее см. здесь

person Sergey Anisimov    schedule 09.03.2019

У меня есть действие GitHub для этого. https://github.com/peter-evans/dockerhub-description

    - name: Docker Hub Description
      uses: peter-evans/[email protected]
      env:
        DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
        DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
        DOCKERHUB_REPOSITORY: peterevans/dockerhub-description

Вы также можете использовать его независимо от GitHub Actions в других инструментах CI.

    docker run -v $PWD:/workspace \
      -e DOCKERHUB_USERNAME='user1' \
      -e DOCKERHUB_PASSWORD='xxxxx' \
      -e DOCKERHUB_REPOSITORY='my-docker-image' \
      -e README_FILEPATH='/workspace/README.md' \
      peterevans/dockerhub-description:2.1.0

Примечание. Это не работает, если вы используете двухфакторную аутентификацию (2FA) и/или используете токены личного доступа для аутентификации в Docker Hub. Вы должны использовать свой фактический пароль Docker Hub. См. сообщение о проблеме здесь: https://github.com/docker/hub-feedback/issues/1927

person peterevans    schedule 16.08.2019

вы можете использовать контейнер докеров в своем конвейере, используя этот

https://hub.docker.com/r/sheogorath/readme-to-dockerhub

Код проекта

https://github.com/SISheogorath/readme-to-dockerhub

Конфиг Gitlab CI Pipeline выглядит так

update-readme:
  stage: docs
  image:
    name: docker:stable
  services:
    - docker:dind
  script:
    - docker run --rm -v $(pwd)/README.md:/data/README.md -e DOCKERHUB_USERNAME=$CI_REGISTRY_USER -e DOCKERHUB_PASSWORD=$CI_REGISTRY_PASSWORD -e DOCKERHUB_REPO_PREFIX=$CI_REGISTRY_IMAGE -e DOCKERHUB_REPO_NAME=$CONTAINER_NAME sheogorath/readme-to-dockerhub

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

  docker run --rm -v $(pwd):/data/ aemdesign/dockerhub-description "$DOCKER_USERNAME" "$DOCKER_PASSWORD" aemdesign/dispatcher

Если вы хотите указать запуск вручную

  docker run --rm -v $(pwd):/data/ aemdesign/dockerhub-description "$DOCKER_USERNAME" "$DOCKER_PASSWORD" aemdesign/dispatcher ./README.md

код: https://github.com/aem-design/docker-dockerhub-description< /а>

person Max Barrass    schedule 01.07.2019

Существует действие github под названием update-container-description, которое обновляет описание репозитория контейнеров в Docker Hub, Quay или Harbour из файла README вашего репозитория github.

person Chris    schedule 11.07.2020

Существует плагин Docker CLI для обновления README в реестрах контейнеров (включая Docker Hub). После его установки вы можете обновить README на Dockerhub с помощью:

docker pushrm myuser/myrepo

Для CI также можно запустить его как контейнер Docker и есть действие github что обтекает его.

person Chris    schedule 28.05.2020

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

Предупреждение об аутентификации. Вам больше не разрешено обновлять определенные ресурсы, включая описание репозитория, с помощью токенов личного доступа через API. Вы должны использовать свой фактический пароль Docker Hub. См. сообщение о проблеме здесь: https://github.com/docker/hub-feedback/issues/1927 Это эффективно ограничивает возможность использования двухфакторной аутентификации, если только вы не выберете автоматические сборки Docker Hub.

person jmb12686    schedule 14.12.2019