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
目录,这或许就是失败的原因。