macos 搭建 docker registry 仓库,出现 "received unexpected HTTP status: 500 Internal Server Error" 错误

最近学习 docker 和 k8s; 由于 k8s 部署 Deployment 的时候,从 docker.io 拉取镜像容易超时,于是考虑搭建一个本机的 docker hub。了解到 docker 有一个 registry 镜像,遂学习之: Deploy a registry server

在 mac 上新建了一个 registry 项目,编写 Makefile 如下

REGISTRY_REPO=/var/lib/registry/docker/registry/v2/repositories
LOCAL_REPO=`pwd`/data/v2/repositories
IMAGE=registry
CONTAINER=registry

build:
	@if [ ! -d $(LOCAL_REPO) ]; then mkdir -p $(LOCAL_REPO); fi
	@echo LOCAL_REPO=$(LOCAL_REPO)
	docker run -d -p 5000:5000 -v $(LOCAL_REPO):$(REGISTRY_REPO) --privileged=true  --restart always --name $(CONTAINER) $(IMAGE)
start:
	docker start $(CONTAINER)
stop:
	docker stop $(CONTAINER)
delete:
	docker rm -f $(CONTAINER)

执行 make build 运行了 registry 镜像,但是 push 本地 image 到 registry 出现问题:

[16:09:11 registry] $ docker push localhost:5000/my-getting-started:3000
The push refers to repository [localhost:5000/my-getting-started]
398786771e51: Pushing  7.052MB
bef245e6b7fc: Retrying in 18 seconds 
788783bb5410: Pushing  178.7kB
9b2457fcc1c5: Pushing  2.048kB
c5088e2ef878: Pushing  3.584kB
12587d8b4618: Retrying in 5 seconds 
738f7039e20b: Pushing  22.79MB/77.6MB
8d3ac3489996: Retrying in 5 seconds 
received unexpected HTTP status: 500 Internal Server Error

屡试屡错。

后来尝试将 Makefile 中的变量修改如下:

REGISTRY_REPO=/var/lib/registry
LOCAL_REPO=`pwd`/data

删除现有的 registry 容器,重新build,再次尝试push,就好使了。
再仔细看官方文档 Customize the storage location, 里面也是绑定的 /var/lib/registry 目录。

查看本机的 registry 项目目录,可以看到 data/docker/registry/v2 目录下除了 repositories 目录,还有 blobs 目录。而最初我们只绑定了容器里的 /var/lib/registry/docker/registry/v2/repositories 目录,这或许就是失败的原因。

posted on 2022-03-16 17:06  HorseShoe2016  阅读(1412)  评论(0编辑  收藏  举报