按照 nexus 设置,已经配置了 docker proxy 类型的代理,分别指向 dockerhub ,ghcr ,mcr 等 docker 源。同时配置 docker group 类型代理,将前面 3 个地址纳入 member 管理。
然后在 docker client 的 /etc/docker/daemon.json 配置 registry-mirrors 指向 nexus 所在机器的 docker group 地址。
现在发现,直接用 docker pull nginxproxy/nginx-proxy:1.7.0-alpine 可以拉取到 dockerhub 的镜像,并且在 nexus 缓存。但是,如果拉 ghcr 或 mcr 专有的镜像,则会提示失败,但是拉取镜像前面加上 nexus 的地址则可以成功,类似 docker pull 192.168.100.100:8080/nginxproxy/nginx-proxy:1.7.0-alpine ,假设 192.168.100.100 是 docker group 代理的地址。
失败提示: Error response from daemon: pull access denied for devcontainers/base, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
按照我的理解,既然已经在 daemon.json 设置了 mirros ,则所有原生不加地址前缀的 docker 请求都会被发往 nexus docker group 端口,看上去像 nexus 无法处理这种非 dockerhub 镜像的请求(已经尝试登录 dockerhub 外的私有站点,仍然无效)。
![]() |
1
2Nfree 9 天前
这个是因为如果你默认不加域的情况下走的就是 dockerhub 或者你在 daemon.json 中配置的镜像代理地址,因为 docker 的 daemon.json 默认是只适配与 dockerhub 的,其他第三方的仓库不在他这个的配置范围内
|
2
kyonn OP @2Nfree 我配置了 daemon.json 的 mirror 为 nexus 的 docker group 地址,不加域名前缀也能正常工作。但是如果拉的镜像是 非 dockerhub 的,nexus 好像就没办法处理,理论上,流量都发给 nexus 了,应该能处理才对。
|
3
kyonn OP @2Nfree 按照下面这篇文章,应该是可以省略域名前缀的。当然,这个文章比较早。
[Using Nexus OSS as a proxy/cache for Docker images – Tech by Maarten]( https://mtijhof.wordpress.com/2018/07/23/using-nexus-oss-as-a-proxy-cache-for-docker-images/) |
![]() |
4
2Nfree 9 天前
就是因为 daemon.json 默认是只适配与 dockerhub 的,所以例如 quay 或者 gcr 的相关都需要你添加代理仓库的前缀,你发的这个文章也是用的 dockerhub ,dockerhub 的代理是可以省去前面的域名的
|
![]() |
5
2Nfree 9 天前
|
![]() |
6
2Nfree 9 天前
|
![]() |
7
XiLingHost 9 天前
添加多个 proxy 和一个 hosted ,最后用一个 group 作为提供服务的那个,就可以自动按顺序去 group 里排列的那些仓库里获取镜像了
|
9
kyonn OP @XiLingHost 现在就是这么做的,而且在 /etc/docker/daemon.json 配置 registry-mirrors 指向 nexus 所在机器的 docker group 地址。
现在的疑问是直接 pull 镜像名,如果这个镜像在 dockerhub 有,那么工作正常,但是如果是 ghcr 这些非 dockerhub 独有的镜像,则 pull 命令无法拉到镜像,除非给镜像名前加上 nexus 地址前缀(这个地址对应 docker group )。 包括 hosted 地址的私有镜像,也无法通过镜像名直接拉取,必须加上 nexus 地址前缀。 |
![]() |
10
XiLingHost 9 天前
有可能和设置里的 Docker Index 设置有关系,试试选择第一个 Use proxy registry
|
11
kyonn OP @XiLingHost 除了 dockerhub 代理,其他代理设置的都是 Use proxy registry
|