如何自动更新Docker Hub的完整描述?

时间:2016-01-10 20:39:08

标签: docker travis-ci docker-registry dockerhub

我使用Travis CI从Dockerfiles构建docker镜像,然后成功将它们推送到Docker Hub。

我创建了一个描述图像及其使用方法的MD文件。我想在完整描述部分的Docker Hub上有相同的描述。

由于我将来可能会更新说明,我想让Travis CI根据新图像中的MD文件自动更新描述。

任何人都知道如何做到这一点?

7 个答案:

答案 0 :(得分:9)

Docker Hub does not expose any API以来,远程向Docker Hub发送内容的唯一方法是使用docker push命令,这限制了发送图像的使用。

另一方面,如果您让Docker Hub服务从Github或Bitbucket存储库为您构建映像,那么Doc​​ker Hub将通过获取在其上找到的README.md文件的内容来更新长描述。库。请参阅Docker Hub的自动构建文档中的Understand the build process部分。

这意味着您在Github或Bitbucket上托管 Dockerfile README.md 文件。

如果你真的需要首先在TravisCI上构建你的图像(也许是因为你也在构建的图像上运行自动化测试),那么你可以让TravisCI在Docker Hub上触发一个webhook,告诉Docker Hub在TravisCI确定后构建图像它正在通过测试。

为此,在Docker Hub中,像配置自动构建一样配置映像(因此关联Github或Bitbucket项目),但停用自动化功能:

  

Docker Hub project build settings

然后向下滚动 Build settings 页面到 Build Trigger 部分并复制触发器URL:

  

Docker Hub project build trigger

现在编辑 .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 project settings

使用Docker Hub Build Settings页面上的触发器令牌值将DOCKER_HUB_TOKEN环境变量添加到Travis CI项目中:

  

Travis CI project environment variables

您仍然需要与Docker Hub项目关联的Github或Bitbucket存储库,但Travis CI将指示Docker Hub何时构建您的映像。

答案 1 :(得分:2)

我有一个GitHub Action可以做到这一点。 https://github.com/peter-evans/dockerhub-description

    - name: Docker Hub Description
      uses: peter-evans/dockerhub-description@v2.1.0
      env:
        DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
        DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
        DOCKERHUB_REPOSITORY: peterevans/dockerhub-description

您还可以独立于其他CI工具中的GitHub Actions使用它。

    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

注意:如果您使用2因子身份验证(2FA)和/或使用个人访问令牌对Docker Hub进行身份验证,则此方法不起作用。您必须使用实际的Docker Hub密码。请参阅此处报告的问题:https://github.com/docker/hub-feedback/issues/1927

答案 2 :(得分:1)

实际上,您可以使用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}")

查看详细信息here

答案 3 :(得分:0)

您可以使用此方法在管道中使用docker容器

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

项目代码

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

Gitlab CI管道配置如下

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

答案 4 :(得分:0)

您只能通过以下方式更新Docker Hub存储库描述:

身份验证警告-不再允许您通过API使用个人访问令牌更新某些资源,包括存储库描述。您必须使用实际的Docker Hub密码。请参阅此处报告的问题:https://github.com/docker/hub-feedback/issues/1927 除非您选择Docker Hub自动构建,否则这将有效限制使用2FA的能力。

答案 5 :(得分:0)

有一个Docker CLI plugin用于更新容器注册表(包括Docker Hub)上的自述文件。安装后,您可以使用以下命令在Dockerhub上更新自述文件:

docker pushrm myuser/myrepo

对于CI,也可以将其作为Docker container运行,并且有a github action环绕它。

答案 6 :(得分:0)

有一个名为update-container-description的github动作 会从github存储库的README文件中更新Docker Hub,Quay或Harbor上的容器存储库的描述。