我使用Travis CI从Dockerfiles构建docker镜像,然后成功将它们推送到Docker Hub。
我创建了一个描述图像及其使用方法的MD文件。我想在完整描述部分的Docker Hub上有相同的描述。
由于我将来可能会更新说明,我想让Travis CI根据新图像中的MD文件自动更新描述。
任何人都知道如何做到这一点?
答案 0 :(得分:9)
自Docker Hub does not expose any API以来,远程向Docker Hub发送内容的唯一方法是使用docker push
命令,这限制了发送图像的使用。
另一方面,如果您让Docker Hub服务从Github或Bitbucket存储库为您构建映像,那么Docker 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项目),但停用自动化功能:
然后向下滚动 Build settings 页面到 Build Trigger 部分并复制触发器URL:
现在编辑 .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网站上的项目页面,打开项目设置:
使用Docker Hub Build Settings页面上的触发器令牌值将DOCKER_HUB_TOKEN
环境变量添加到Travis CI项目中:
您仍然需要与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上的容器存储库的描述。