如何自动更新Docker Hub上的完整描述?
我正在使用Travis CI从DockerFile构建docker图像,然后在成功时将其推送到docker中心 我已经创建了一个MD文件来描述图像以及如何使用它。我想在完整描述部分中对Docker Hub进行相同的描述 由于将来可能会更新描述,我希望Travis CI根据存储库中的MD文件自动更新描述,并使用新图像 有人知道如何做到这一点吗?因为,远程向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
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