You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开启Docker私有Registry删除功能?Registry版本2.7.1

解决Docker Registry 2.7.1删除镜像失败的问题

1. 正确配置删除功能(避免容器重启后配置丢失)

你之前通过环境变量配置无效,是因为Registry的环境变量需要匹配配置层级的传递规则,手动修改容器内配置会在重启后被镜像默认文件覆盖,正确做法如下:

方式一:通过docker-compose环境变量配置

在docker-compose.yml中按层级结构设置环境变量:

version: '3'
services:
  registry:
    image: registry:2.7.1
    environment:
      - REGISTRY_STORAGE_DELETE_ENABLED=true
    volumes:
      - ./registry-data:/var/lib/registry
    ports:
      - 5000:5000

方式二:挂载自定义配置文件

创建本地config.yml文件,写入完整配置:

version: 0.1
storage:
  delete:
    enabled: true
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000

然后在docker-compose.yml中挂载该文件:

version: '3'
services:
  registry:
    image: registry:2.7.1
    volumes:
      - ./registry-data:/var/lib/registry
      - ./config.yml:/etc/docker/registry/config.yml
    ports:
      - 5000:5000

修改后重启容器,配置会持久生效。

2. 确认存储驱动支持删除

Registry 2.7.1默认的filesystem存储驱动支持删除操作,若你使用了S3、Azure Blob等第三方存储后端,需确认该后端是否开启了删除权限。
如果是filesystem驱动,检查挂载的本地目录权限:容器内运行用户ID为10000,本地目录需给该用户读写权限:

chown -R 10000:10000 ./registry-data

3. 正确执行删除与垃圾回收

删除镜像需要分两步操作:

步骤1:删除镜像Manifest

首先获取镜像Manifest的哈希值(不能直接用tag):

curl -I http://你的Registry地址:5000/v2/镜像名/manifests/镜像tag

在响应头中找到Docker-Content-Digest字段,这就是需传入的哈希值,执行删除:

curl -X DELETE http://你的Registry地址:5000/v2/镜像名/manifests/哈希值

步骤2:执行垃圾回收清理冗余数据

删除Manifest后,镜像层文件仍会留在存储目录,需运行垃圾回收彻底清理:

docker exec -it Registry容器名 registry garbage-collect /etc/docker/registry/config.yml

添加--delete-untagged参数可同时清理所有无tag的镜像:

docker exec -it Registry容器名 registry garbage-collect /etc/docker/registry/config.yml --delete-untagged

4. 排查配置生效情况

若仍返回UNSUPPORTED错误,检查容器启动日志确认配置加载:

docker logs Registry容器名

日志中应出现storage.delete.enabled: true的配置项,若未出现,说明配置未正确加载,需检查挂载或环境变量的写法。

内容的提问来源于stack exchange,提问作者Kaue Almeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:21:07