docker - 无法从 Docker 代理/镜像/缓存注册表中删除图像
问题描述
registry:2
通过 docker-compose运行图像1.27.4
,docker 本身位于19.03.13
.
注册表被配置为“pull through cache”,也被某些人称为“代理”或“镜像”。设置非常基础,遵循官方文档:
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
enabled: true
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
当使用标准程序通过 API 删除此注册表中的图像时...
查找标签名称
export HEADER="Accept: application/vnd.docker.distribution.manifest.v2+json" curl -s -H $HEADER https://<HOST>/v2/<CATALOG>/tags/list
找到对应的SHA
curl -sI -k -H $HEADER https://<HOST>/v2/<CATALOG>/manifests/<TAG>
通过 SHA 删除
curl -H $HEADER -X DELETE https://<HOST>/v2/<CATALOG>/manifests/<SHA>
...我得到最后一个命令的 404:
404 page not found
当我proxy
对注册表配置中注释掉的位执行相同操作时,它可以工作。
无法反对这样的“通过缓存拉取”注册表,这感觉非常熟悉,公平地说,这是有记录的。这个用例不是——或者是吗?
解决方案
图像的通过缓存的拉取功能registry:2
正是为此而设计的,拉取。不支持任何其他操作,例如推送或删除,并且预计会出错。要从源中删除清单,您需要针对该注册表运行删除命令。我不相信有任何 API 可以过早地从缓存中删除清单,这是一个固定的 7 天到期时间。
推荐阅读
- excel - Excel:最多运行两行,或者只在一行中返回值
- neo4j - Neo4J Community 4.1.6 启动后停止
- r - Xgboost:使用单一测试观察?
- unit-testing - 如何在单元测试 Dart 中不调用另一个函数内部的函数?
- actions-on-google - 当我使用 Nest Hub Max 进入房间时控制我的智能家居设备
- python - 无法运行任何脚本、Traceback、FileNotFoundError:[Errno 2]
- lua - LOVE2D 中的基本退出函数
- r - 如何有条件地在行上创建计数器?R
- mysql - msql 密码 chancing_sha2_password 插件
- snowflake-cloud-data-platform - 253006(不适用):文件不存在: