如何通过API定期删除Artifactory Docker仓库中的所有镜像
解决Artifactory Docker仓库定期清空的问题
直接用Artifactory REST API清空整个仓库
你有仓库的全权限,直接用Artifactory的删除API就能一次性清空整个Docker仓库,这是最直接的方式:
curl命令示例
curl -X DELETE -u "你的用户名:你的密码/API密钥" "https://artifactory.MYCOMPANY.com/artifactory/api/storage/REPO-docker-local?deleteAll=1"
- 凭据部分:可以用账号密码,也可以用Artifactory个人设置里生成的API密钥,格式统一为
用户名:密钥/密码 deleteAll=1参数必须添加,否则只会删除空文件夹,无法清理镜像的实际内容
配置每月定时任务
把上面的命令做成脚本,添加到Cron实现每月自动执行:
- 创建清理脚本(比如命名为
clean_docker_repo.sh):
#!/bin/bash # Artifactory Docker仓库每月清理脚本 curl -X DELETE -u "your_user:your_api_key" "https://artifactory.MYCOMPANY.com/artifactory/api/storage/REPO-docker-local?deleteAll=1"
- 给脚本添加执行权限:
chmod +x clean_docker_repo.sh
- 配置Cron任务:
运行crontab -e,添加一行规则(示例为每月1号凌晨2点执行):
0 2 1 * * /脚本的绝对路径/clean_docker_repo.sh >> /var/log/artifactory_cleanup.log 2>&1
日志文件可以帮你排查任务执行是否成功。
可选:按需删除(如果后续不需要全删)
要是之后需要保留部分镜像,比如只删除旧版本,可以先用Artifactory的AQL(Artifactory Query Language)查询出目标镜像的路径,再逐个删除:
用AQL查询仓库内的镜像文件夹
curl -X POST -u "你的用户名:你的凭据" "https://artifactory.MYCOMPANY.com/artifactory/api/search/aql" -H "Content-Type: text/plain" -d ' items.find({ "repo": "REPO-docker-local", "type": "folder" }) '
拿到路径后,调用删除接口移除单个镜像:
curl -X DELETE -u "你的用户名:你的凭据" "https://artifactory.MYCOMPANY.com/artifactory/api/storage/REPO-docker-local/目标镜像路径"
内容的提问来源于stack exchange,提问作者ikamen
相关产品推荐
相关产品推荐

