registry仓库的API默认是不提供垃圾回收API的,原因是在回收过程中,注册表是只读的,此时也不能进行push操作,所以就目前registry的设计来说,无法提供API进行实时的垃圾回收操作,那有什么办法可以通过API调用来进行垃圾回收呢?
这里给一个最简单的方法,通过docker api的exec操作。访问代码我贴在下面了,自己试吧,不想做过多的赘述,都是基本操作~
首先开放docker的api方式调用:
[root@docker2 ~]# vi /usr/lib/systemd/system/docker.service
# 如果是ubuntu用户, vi /lib/systemd/system/docker.service
#找到ExecStart并添加 -H tcp://0.0.0.0:2375 如下,端口2375可以自己定哈~不是固定的
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
#退出保存
[root@docker2 ~]# systemctl daemon-reload
[root@docker2 ~]# systemctl restart docker
[root@docker2 ~]# netstat -antp | grep 2375
tcp6 0 0 :::4312 :::* LISTEN 4764/dockerd
这里docker请求的2375端口是我自己定的。
192.168.24.129:2375/containers/{id}/exec
{
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false,
"Privileged": true,
"Cmd": [
"registry",
"garbage-collect",
"--dry-run",
"/etc/docker/registry/config.yml"
],
"WorkingDir": "/"
}
192.168.24.129:2375/exec/{id}/start
{
"Detach": false,
"Tty": false
}
下图的4321端口号不用在意,我当时测试的时候忘记改回来了,跟上面的2375端口号是一个东西。
参考官方文档网址:https://docs.docker.com/engine/api/v1.41/#tag/Exec