首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker注册中心充当代理,不提取图像

Docker注册中心充当代理,不提取图像
EN

Stack Overflow用户
提问于 2020-02-10 17:43:18
回答 1查看 574关注 0票数 2

我将码头注册中心设置为代理,正如我的here注册表所描述的那样。

代码语言:javascript
复制
docker run -d -it --restart=always -p 5000:5000 --name docker-registry-proxy -v `pwd`/config.yml:/etc/docker/registry/config.yml registry
代码语言:javascript
复制
2020-02-10T17:11:52.833382682Z INFO[0000] redis not configured                          go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:52.833404378Z INFO[0000] Starting upload purge in 20m0s                go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:52.842100541Z INFO[0000] using inmemory blob descriptor cache          go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:52.842153163Z INFO[0000] Starting cached object TTL expiration scheduler...  go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:53.254072787Z INFO[0000] Discovered token authentication URL: https://gitlab.com/jwt/auth  go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683
2020-02-10T17:11:53.254102605Z INFO[0000] Registry configured as a proxy cache to https://registry.gitlab.com/  go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:53.254110743Z WARN[0000] Registry does not implement RempositoryRemover. Will not be able to delete repos and tags  go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1
2020-02-10T17:11:53.254356780Z INFO[0000] listening on [::]:5000                        go.version=go1.11.2 instance.id=85522854-b09f-4a91-9dfa-325ad3d90683 service=registry version=v2.7.1

当我运行一个docker pull registry.gitlab.com/path/to/my/image时,我的代理注册表不会接收任何请求,也不会更新它的缓存。

如果在注册表日志中运行docker pull nginx,则会看到请求返回404。这很正常,因为nginx不是我注册表的一部分。

,但为什么当我试图提取自己的图像时什么也不会发生呢?

如果我运行docker pull localhost:5000/path/to/my/image,注册表将从registry.gitlab.com中提取图像,但作为localhost:5000。

EN

回答 1

Stack Overflow用户

发布于 2022-03-29 13:30:46

当心!很抱歉发生了坏死,但由于接下来的几代人可能会在搜索中遇到这个问题,就像我所做的那样,我还是想发布一个答案。

这里问题的关键是,在当前状态下的对接客户端(docker 20.10,注册表2.8.1)只在拖放映像时才会尊重“--注册表镜像”设置,而不需要参考规范中的注册表规范。

否则,当您尝试docker pull localhost:5000/image:tagregistry.gitlab.com/image:tag时,它绕过配置的镜像,直接与您指定的URL通信。

因此,当您要求它从registry.gitlab.com/image:tag中提取时,请求直接访问您的GitLab注册表,而不需要直接缓存。

当您要求它从localhost:5000/image:tag中提取时,请求将直接命中您的缓存,这意味着将请求代理到您的GitLab注册中心,缓存结果,但是当然,拉出的图像被标记为好像它是从'localhost:5000‘下载的。

您可以尝试将您的映像提取为image:tag,这样您的请求就会转到--注册表镜像,它是localhost:5000,然后代理到GitLab并缓存,但在这种情况下,拉出的图像将被标记为image:tag

但是,如果您的工作流坚持将图像标记为registry.gitlab.com/image:tag,例如,对于docker-come.yml或其他任何东西,您可以使用单独的docker tag命令来实现这一点。

示例:

代码语言:javascript
复制
    docker pull my_image:tag
    docker tag my_image:tag registry.gitlab.com/my_image:tag
    docker images

但是在这个设置中,每当您需要更新最新的标记时,请求将再次直接转到registry.gitlab.com,您的缓存将不会被更新。

我建议使用https://github.com/rpardini/docker-registry-proxy来实现更智能的坞注册中心缓存。这是一个更复杂的设置,但没有缺陷的官方注册表分发做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60155677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档