Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何自动更新Docker Hub上的完整描述?_Docker_Travis Ci_Docker Registry_Dockerhub - Fatal编程技术网

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

如何自动更新Docker Hub上的完整描述?,docker,travis-ci,docker-registry,dockerhub,Docker,Travis Ci,Docker Registry,Dockerhub,我正在使用Travis CI从DockerFile构建docker图像,然后在成功时将其推送到docker中心 我已经创建了一个MD文件来描述图像以及如何使用它。我想在完整描述部分中对Docker Hub进行相同的描述 由于将来可能会更新描述,我希望Travis CI根据存储库中的MD文件自动更新描述,并使用新图像 有人知道如何做到这一点吗?因为,远程向Docker Hub发送内容的唯一方法是使用Docker push命令,这限制了对发送图像的使用 另一方面,如果您让Docker Hub服务从G

我正在使用Travis CI从DockerFile构建docker图像,然后在成功时将其推送到docker中心

我已经创建了一个MD文件来描述图像以及如何使用它。我想在完整描述部分中对Docker Hub进行相同的描述

由于将来可能会更新描述,我希望Travis CI根据存储库中的MD文件自动更新描述,并使用新图像

有人知道如何做到这一点吗?

因为,远程向Docker Hub发送内容的唯一方法是使用
Docker push
命令,这限制了对发送图像的使用

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

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


如果您确实需要首先在TravisCI上构建映像(可能是因为您还对构建的映像运行了自动测试),那么您可以让TravisCI在Docker Hub上触发webhook,在TravisCI确定映像通过测试后通知Docker Hub构建映像

为此,在Docker Hub中,按照自动构建的方式配置映像(因此关联Github或Bitbucket项目),但停用自动功能:

然后在“生成设置”页面上向下滚动到“生成触发器”部分,并复制触发器URL:

现在编辑.travis.yml文件并添加以下块(注意
占位符):

成功后:
#通知Docker Hub进行新生成
- >
[“$TRAVIS_BRANCH”==“master”]
&&curl-X POST-H“内容类型:application/json”
--数据“{”docker_tag_name:“latest”}”
https://registry.hub.docker.com/u///trigger/$DOCKER\u HUB\u代币/
然后转到Travis CI网站上的项目页面,并打开项目设置:

并将
DOCKER\u HUB\u TOKEN
环境变量添加到Travis CI项目中,使用DOCKER HUB Build Settings页面上的触发器标记值:


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

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

localcode=$(jq-n--arg msg“$”(您可以使用此

项目代码

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
此外,我还有一个较小的命令,您也可以使用,如果在docker repo中运行此命令,默认情况下它将读取
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

代码:

我有一个GitHub操作来完成此操作。

您还可以独立于其他CI工具中的GitHub操作来使用它

    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密码。请参阅此处报告的问题:

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

  • 手动或通过访问API的助手作业或容器访问集线器API,如。请参阅下面的身份验证警告。
  • 使用
身份验证警告-不再允许您通过API使用个人访问令牌更新某些资源,包括存储库描述。您必须使用实际的Docker Hub密码。请参阅此处报告的问题: 这有效地限制了使用2FA的能力,除非您选择Docker Hub Automated Builds。

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

docker pushrm myuser/myrepo

对于CI,也可以将其作为一个包运行。有一个github操作称为
这将从github repo的自述文件中更新Docker Hub、Quay或Harbor上容器repo的描述。

是的,我知道自动构建,但我想使用Travis CI,这样我也可以进行一系列测试。是否有其他方法,或者我应该编写一个脚本作为浏览器并更改Docker Hub页面上的描述?@NEO可以,设置更复杂,但我会尽量解释清楚→ 答案编辑这其实是个好主意。但是如果我想触发多个构建,我应该怎么做?现在,我正在使用Travis CI的构建矩阵功能,通过更改一些环境变量来构建多个映像。是否可以在矩阵的每一行触发构建?你不能,Docker Hub不知道TravisCI。这些矩阵设置我们只知道TravisCI。Docker Hub可以做的是让它构建存储库的不同分支,并为从中生成的图像分配不同的标记。请参阅
构建设置中的
Docker Hub确实公开了一个API。我想他们只是不宣传它或提供官方文档。这是一个很好的参考这是我过去用过的。
    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
docker pushrm myuser/myrepo