主要描述如何进行本地私有镜像仓库。
1. 创建私有镜像仓库
1) 拉取Registry镜像源
通过docker pull来执行下载registry镜像。
$ docker pull registry
Using default tag: latest
latest: Pulling from library/registry
1cc3d825d8b2: Pull complete
85ab09421e5a: Pull complete
40960af72c1c: Pull complete
e7bb1dbb377e: Pull complete
a538cc9b1ae3: Pull complete
Digest: sha256:ac0192b549007e22998eb74e8d8488dcfe70f1489520c3b144a6047ac5efbe90
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
2) 查询是否成功下载
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 75ef5b734af4 12 months ago 25.4MB
3) 启动私有Registry容器
在启动容器前,可以将容器内的数据映射挂载在指定的目录上,比如此处为宿主机的目录:/home/wrs/registry
。
$ mkdir -p /home/wrs/registry
启动私有Registry容器
$ docker run -d -p 5000:5000 -v /home/wrs/registry:/var/lib/registry --name registry registry
or
$ docker run -d -p 5000:5000 -v /home/wrs/registry:/var/lib/registry --restart=always --name registry registry
参数简要说明:
-d
: 让容器后台运行-p
: 指定映射端口(前者是宿主机的端口号,后台是容器的端口号)-v
: 数据挂载目录(前者是宿主机的目录,后台是容器的目录)—-name
: 运行容器的命名
检查容器是否成功运行
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
977277b0b8e1 registry "/entrypoint.sh /etc…" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
停止容器和删除容器的命令
$ docker stop registry //停止容器
$ docker rm registry //删除容器
$ docker ps -a //查询所有容器
$ docker ps //查询正在运行的容器
4) 添加私有镜像仓库到docker的配置文件
通常,在/etc/docker/daemon.json中增加私有镜像仓库的信息,例如 "insecure-registries": ["192.168.100.55:5000"]
。例如,这儿的地址为宿主机地址。
主要原因是Docker从1.3.X之后,与docker registry交互默认使用的是https,而我们搭建的私有仓库提供的是http,所以需要增加上述的配置。
$ cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerproxy.cn"
],
"insecure-registries": [
"192.168.100.55:5000"
]
}
需要注意本文件的格式,错误将无法启动docker服务。
5) 启动私有镜像仓库容器
由于修改了docker的配置,执行下列命令更新和启动镜像仓库容器。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker restart registry
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
977277b0b8e1 registry "/entrypoint.sh /etc…" 2 hours ago Up 4 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
到此,以上五个步骤完成私有镜像仓库的创建。
2. 私有镜像仓库的操作
1)对现在镜像打标签(tag)
先查询现在镜像,然后对需要上传到私有镜像库的镜像打上标签(tag)。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
mariadb latest 4b8711c6c639 7 weeks ago 407MB
registry latest 75ef5b734af4 12 months ago 25.4MB
通过docker tag
命令进行,比如选择mariadb
镜像。
$ docker tag mariadb:latest 192.168.100.55:5000/mariadb
查询是否已生成新的标签(tag)的镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
mariadb latest 4b8711c6c639 7 weeks ago 407MB
192.168.100.55:5000/mariadb latest 4b8711c6c639 7 weeks ago 407MB
registry latest 75ef5b734af4 12 months ago 25.4MB
2)将镜像上传到私有镜像仓库
通过docker push
命令来执行。
$ docker push 192.168.100.55:5000/mariadb
Using default tag: latest
The push refers to repository [192.168.100.55:5000/mariadb]
80646396e9da: Pushed
d6126fa12eee: Pushed
e6108c62055d: Pushed
8a5a565932ac: Pushed
f5dd2ec091d1: Pushed
ea5b75ace7af: Pushed
d94d9ea67ca1: Pushed
a46a5fb872b5: Pushed
latest: digest: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037 size: 1990
3)查看镜像
可以通过浏览器或命令行方式查看到仓库中的所有镜像。
浏览器方式:http://<主机IP>:<端口>/v2/_catalog
即可查看。
示例如下:
http://192.168.100.55:5000/v2/_catalog
命令行方式:curl http://<主机IP>:<端口>/v2/_catalog
即可查看。
示例如下:
$ curl http://192.168.100.55:5000/v2/_catalog
{"repositories":["mariadb"]}
4)下载镜像
如果本地已有镜像,可以先删除本地镜像,便于稍后从私有仓库重新下载。
$ docker rmi 192.168.100.55:5000/mariadb:latest
通过docker pull
命令来下载镜像。
示例如下:
$ docker pull 192.168.100.55:5000/mariadb
Using default tag: latest
latest: Pulling from mariadb
802008e7f761: Pull complete
60bf5e4921eb: Pull complete
d4d47b8d6ea0: Pull complete
e38fc7e50f91: Pull complete
725acd03a3bc: Pull complete
db106334738c: Pull complete
234171a3de7d: Pull complete
25efdea61d9c: Pull complete
Digest: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037
Status: Downloaded newer image for 192.168.100.55:5000/mariadb:latest
192.168.100.55:5000/mariadb:latest
$
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
192.168.100.55:5000/mariadb latest 4b8711c6c639 7 weeks ago 407MB
registry latest 75ef5b734af4 12 months ago 25.4MB
镜像修改名称命令格式:docker tag <镜像id> <新镜像名>:<标签>
或docker tag <旧镜像名> <新镜像名>
示例如下:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
mariadb latest 4b8711c6c639 7 weeks ago 407MB
registry latest 75ef5b734af4 12 months ago 25.4MB
wrs@wrs-VirtualBox:~/registry$ docker tag 4b8711c6c639 mariadb:3.2
wrs@wrs-VirtualBox:~/registry$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
mariadb 3.2 4b8711c6c639 7 weeks ago 407MB
mariadb latest 4b8711c6c639 7 weeks ago 407MB
registry latest 75ef5b734af4 12 months ago 25.4MB
已加载镜像删除命令格式 docker rmi <镜像名称>:<标签>
,示例如下:
$ docker rmi mariadb:3.2
Untagged: mariadb:3.2
$ docker rmi mariadb:latest
Untagged: mariadb:latest
Untagged: mariadb@sha256:4a1de8fa2a929944373d7421105500ff6f889ce90dcb883fbb2fdb070e4d427e
Deleted: sha256:4b8711c6c639fa9166e6a617c421e2fc43296c8add9a846fe8237b8ac9184d51
Deleted: sha256:7a8ff23f291121f3ca768aff13ec628e90ffb3e96a8c72fda2867011fb634f86
Deleted: sha256:f7b2b6781129cfbe7e38efa8cfbcb7d894553d6df9c549f70371880e26d82d41
Deleted: sha256:d6af9c12f2f2fd328a61afd1aa19b6ee312240be1474e0e4359adb5f3798bb0a
Deleted: sha256:8f10468663247a733cbf81d58181ff894b774a79a3fed2da4d192bbaa9242179
Deleted: sha256:b873f00f1c734fa83877f8170d09b8baa640858ed5f8bdfe95b725ea50fc6efc
Deleted: sha256:e02762a1e0490dcb879e3cd007a64e06daea95d7eb354dcbaeb3ed15be3bfa91
Deleted: sha256:b9e0c994946d669688974a1f38301165698f4c60858c9e64bfcea11a1e895057
Deleted: sha256:a46a5fb872b554648d9d0262f302b2c1ded46eeb1ef4dc727ecc5274605937af
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest be960704dfac 9 days ago 602MB
registry latest 75ef5b734af4 12 months ago 25.4MB
wrs@wrs-VirtualBox:~/registry$
5)删除私有镜像仓库镜像
方法一:调用Registry接口进行删除 (这个方法好像不能清除对应的数据文件夹,请参考『方法二』)
Step 1: 修改镜像仓库的配置文件
由于registry v2版本的镜像,默认是不允许删除镜像的,所以需要修改配置文件,使之支持删除操作。
提示:如果之前执行过这个操作,则不需要重复执行。
通过下述查询registry容器的ID:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
977277b0b8e1 registry "/entrypoint.sh /etc…" 2 hours ago Up 19 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
查看配置文件。
$ docker exec -it registry cat /etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
wrs@wrs-VirtualBox:/etc/docker$
修改配置文件,在**storage
**部分增加delete
部分,将enabled
设置为true
。
示例如下:
$ docker exec -it registry vi /etc/docker/registry/config.yml
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
然后重启registry容器,让新的配置生效。命令如下:
$ docker restart registry
Step 2: 查看镜像tag
通过以下命令查询当前镜像仓库中的所有的镜像。
$ curl http://192.168.100.55:5000/v2/_catalog
{"repositories":["mariadb","test/mysql"]}
查询镜像tag,接口请求格式为:
curl <镜像仓库地址>/v2/<镜像名称>/tags/list
示例如下:
$ curl http://192.168.100.55:5000/v2/mariadb/tags/list
{"name":"mariadb","tags":["latest"]}
Step 3: 获取对应tag镜像的digest_hash, 接口请求格式如下:
查询对应tag镜像的digest_hash,接口请求的格式为:
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET <镜像仓库地址>/v2/<镜像名称>/manifests/<镜像tag>
示例如下:
$ curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET <http://192.168.100.55:5000/v2/**mariadb**/manifests/**latest**>
HTTP/1.1 200 OK
Content-Length: 1990
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037"
X-Content-Type-Options: nosniff
Date: Thu, 24 Oct 2024 11:51:12 GMT
记住Docker-Content-Digest后面的值,如: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037
Step 5: 删除私有镜像仓库中镜像
删除镜像的接口请求格式为:
curl -I -X DELETE <镜像地址>/v2/<镜像名称>/manifests/<Docker-Content-Digest>
示例如下 :
$ curl -I -X DELETE http://192.168.100.55:5000/v2/mariadb/manifests/sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037 -v
* Trying 192.168.100.55:5000...
* Connected to 192.168.100.55 (192.168.100.55) port 5000
> DELETE /v2/mariadb/manifests/sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037 HTTP/1.1
> Host: 192.168.100.55:5000
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 202 Accepted
HTTP/1.1 202 Accepted
< Docker-Distribution-Api-Version: registry/2.0
Docker-Distribution-Api-Version: registry/2.0
< X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
< Date: Thu, 24 Oct 2024 13:14:48 GMT
Date: Thu, 24 Oct 2024 13:14:48 GMT
< Content-Length: 0
Content-Length: 0
<
* Connection #0 to host 192.168.100.55 left intact
Step 6: 执行垃圾回收,清理镜像文件
清理镜像的命令格式为:
docker exec -it <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件>
示例如下:
$ docker exec -it registry /bin/registry garbage-collect /etc/docker/registry/config.yml
mariadb
mariadb: marking manifest sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037
mariadb: marking blob sha256:4b8711c6c639fa9166e6a617c421e2fc43296c8add9a846fe8237b8ac9184d51
mariadb: marking blob sha256:802008e7f7617aa11266de164e757a6c8d7bb57ed4c972cf7e9f519dd0a21708
mariadb: marking blob sha256:60bf5e4921ebf40cdeb9808d25882e73722afca373a3b3f38ecf24f105d817ea
mariadb: marking blob sha256:d4d47b8d6ea097dcf6c6d64ef12fa26e71fd141d72991e8fd24229b45c708c6b
mariadb: marking blob sha256:e38fc7e50f91c37a0d822eeee9b8edc4a8fc386ca6db4709ec73ffdc15b1f52e
mariadb: marking blob sha256:725acd03a3bc5090a20483353b8e4cd62df0a69d49d852ee5201a85b8622a092
mariadb: marking blob sha256:db106334738c626481137264559382cb5bd33a57bd8ae1a08abc4190af7719fb
mariadb: marking blob sha256:234171a3de7d7b4a5b3db938740204e157ec3d0d0ab13db1a9f7037f150d62d3
mariadb: marking blob sha256:25efdea61d9c3a2a5455155d0ccf1fea3169802cae37cfa5bb07cb5708716961
test/mysql
test/mysql: marking manifest sha256:caf5feb0e8e5c5b7873085e1df0fdb10903d9cda62f9bd36098b580671b1a18e
test/mysql: marking blob sha256:be960704dfac8744a2e2df80c90087551a998ac008916b9d1423d7b0c5ee33ea
test/mysql: marking blob sha256:eba3c26198b76ce92acfa6308130ab3224ee9fff583c51487a8caa0336d59e4e
test/mysql: marking blob sha256:97f7c8c33abe1138c12d45d7a453df15f348b13043bbdc1c5bbe95e07dfa6403
test/mysql: marking blob sha256:aa23d877fa04f2edd527357b3a38ac6199bfdc0e7b09b3b64f9424528a168e03
test/mysql: marking blob sha256:a143609ddd2d82d253ae60d2f6604cdc7df34ed671b0e24707c31a78800ee88c
test/mysql: marking blob sha256:78308a3437c4e14b44bb662c504c2a8c1b2ef7142207787bea32157cc91e3fe9
test/mysql: marking blob sha256:c0880e4b37373adae469fec17a9d0947481f0a105bd70a901556aaa66ff6f246
test/mysql: marking blob sha256:4bab267f9ce1d6b904aeec7a381caf991e717163fb9f56a67d347f9c1927bd2a
test/mysql: marking blob sha256:e575f6d9b17aa2a17b5604b104d60f453cc7f7944980cb645be85bcf31805494
test/mysql: marking blob sha256:607f86c00053926c764f5761ea2f19822ab243ed23cd1eff55b0d61deabb46d4
test/mysql: marking blob sha256:cd68caa5febee3feb96495599d9f764927c0feed19ba48664a94ab33731351ca
22 blobs marked, 0 blobs and 0 manifests eligible for deletion
Step 7: 重启私有镜像容器
执行下述命令重新启动私有镜像容器。
$ docker restart registry
检查文件是否已删除
$ curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET <http://192.168.100.55:5000/v2/**mariadb**/manifests/**latest**>
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Thu, 24 Oct 2024 09:43:00 GMT
Content-Length: 96
方法二:直接删除镜像的repositories
Step 1: 打开镜像的存储目录,删除镜像文件夹,格式为:
docker exec <私有镜像仓库> /bin/rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名称>
示例如下:
$ docker exec -it registry /bin/ls -l /var/lib/registry/docker/registry/v2/repositories
total 8
drwxr-xr-x 5 root root 4096 Oct 24 11:23 mariadb
drwxr-xr-x 3 root root 4096 Oct 24 07:16 test
$ docker exec registry /bin/rm -rf /var/lib/registry/docker/registry/v2/repositories/mariadb
Step 2: 执行垃圾回收,清理镜像文件,命令格式为:
docker exec <镜像仓库容器ID/名称> /bin/registry garbage-collect <镜像仓库配置文件>
示例如下:
$ docker exec registry /bin/registry garbage-collect /etc/docker/registry/config.yml
test/mysql
test/mysql: marking manifest sha256:caf5feb0e8e5c5b7873085e1df0fdb10903d9cda62f9bd36098b580671b1a18e
test/mysql: marking blob sha256:be960704dfac8744a2e2df80c90087551a998ac008916b9d1423d7b0c5ee33ea
test/mysql: marking blob sha256:eba3c26198b76ce92acfa6308130ab3224ee9fff583c51487a8caa0336d59e4e
test/mysql: marking blob sha256:97f7c8c33abe1138c12d45d7a453df15f348b13043bbdc1c5bbe95e07dfa6403
test/mysql: marking blob sha256:aa23d877fa04f2edd527357b3a38ac6199bfdc0e7b09b3b64f9424528a168e03
test/mysql: marking blob sha256:a143609ddd2d82d253ae60d2f6604cdc7df34ed671b0e24707c31a78800ee88c
test/mysql: marking blob sha256:78308a3437c4e14b44bb662c504c2a8c1b2ef7142207787bea32157cc91e3fe9
test/mysql: marking blob sha256:c0880e4b37373adae469fec17a9d0947481f0a105bd70a901556aaa66ff6f246
test/mysql: marking blob sha256:4bab267f9ce1d6b904aeec7a381caf991e717163fb9f56a67d347f9c1927bd2a
test/mysql: marking blob sha256:e575f6d9b17aa2a17b5604b104d60f453cc7f7944980cb645be85bcf31805494
test/mysql: marking blob sha256:607f86c00053926c764f5761ea2f19822ab243ed23cd1eff55b0d61deabb46d4
test/mysql: marking blob sha256:cd68caa5febee3feb96495599d9f764927c0feed19ba48664a94ab33731351ca
12 blobs marked, 10 blobs and 0 manifests eligible for deletion
blob eligible for deletion: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037
blob eligible for deletion: sha256:60bf5e4921ebf40cdeb9808d25882e73722afca373a3b3f38ecf24f105d817ea
time="2024-10-24T11:32:07.014271503Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/26/269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
time="2024-10-24T11:32:07.01445299Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/60/60bf5e4921ebf40cdeb9808d25882e73722afca373a3b3f38ecf24f105d817ea" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
blob eligible for deletion: sha256:802008e7f7617aa11266de164e757a6c8d7bb57ed4c972cf7e9f519dd0a21708
time="2024-10-24T11:32:07.0151396Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/80/802008e7f7617aa11266de164e757a6c8d7bb57ed4c972cf7e9f519dd0a21708" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
blob eligible for deletion: sha256:db106334738c626481137264559382cb5bd33a57bd8ae1a08abc4190af7719fb
time="2024-10-24T11:32:07.024260265Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/db/db106334738c626481137264559382cb5bd33a57bd8ae1a08abc4190af7719fb" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
blob eligible for deletion: sha256:e38fc7e50f91c37a0d822eeee9b8edc4a8fc386ca6db4709ec73ffdc15b1f52e
blob eligible for deletion: sha256:25efdea61d9c3a2a5455155d0ccf1fea3169802cae37cfa5bb07cb5708716961
blob eligible for deletion: sha256:4b8711c6c639fa9166e6a617c421e2fc43296c8add9a846fe8237b8ac9184d51
blob eligible for deletion: sha256:725acd03a3bc5090a20483353b8e4cd62df0a69d49d852ee5201a85b8622a092
time="2024-10-24T11:32:07.040481249Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/e3/e38fc7e50f91c37a0d822eeee9b8edc4a8fc386ca6db4709ec73ffdc15b1f52e" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
time="2024-10-24T11:32:07.04083678Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/25/25efdea61d9c3a2a5455155d0ccf1fea3169802cae37cfa5bb07cb5708716961" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
time="2024-10-24T11:32:07.040958029Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/4b/4b8711c6c639fa9166e6a617c421e2fc43296c8add9a846fe8237b8ac9184d51" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
time="2024-10-24T11:32:07.041091747Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/72/725acd03a3bc5090a20483353b8e4cd62df0a69d49d852ee5201a85b8622a092" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
blob eligible for deletion: sha256:d4d47b8d6ea097dcf6c6d64ef12fa26e71fd141d72991e8fd24229b45c708c6b
time="2024-10-24T11:32:07.041899186Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/d4/d4d47b8d6ea097dcf6c6d64ef12fa26e71fd141d72991e8fd24229b45c708c6b" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
time="2024-10-24T11:32:07.043297838Z" level=info msg="Deleting blob: /docker/registry/v2/blobs/sha256/23/234171a3de7d7b4a5b3db938740204e157ec3d0d0ab13db1a9f7037f150d62d3" go.version=go1.20.8 instance.id=57067977-f0da-46b1-9b71-5c8548261bdd service=registry
blob eligible for deletion: sha256:234171a3de7d7b4a5b3db938740204e157ec3d0d0ab13db1a9f7037f150d62d3
wrs@wrs-VirtualBox:~$
Step 3: 重启私有镜像容器
执行下述命令重新启动私有镜像容器。
$ docker restart registry
目前看,如果不重新启动,则无法上传相同格式的镜像,会有如下类似报错。示例如下:
$ docker push 192.168.100.55:5000/mariadb
Using default tag: latest
The push refers to repository [192.168.100.55:5000/mariadb]
80646396e9da: Layer already exists
d6126fa12eee: Layer already exists
e6108c62055d: Layer already exists
8a5a565932ac: Layer already exists
f5dd2ec091d1: Layer already exists
ea5b75ace7af: Layer already exists
d94d9ea67ca1: Layer already exists
a46a5fb872b5: Layer already exists
latest: digest: sha256:269e3d6595474caa3e7a76fd1bcf0dbcd59b64f4b22dfb511401a37840a98037 size: 1990