V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kyonn
V2EX  ›  程序员

nexus 代理 docker 时怎么设置才能省略 地址前缀。

  •  
  •   kyonn · 9 天前 · 726 次点击

    按照 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 外的私有站点,仍然无效)。

    11 条回复    2025-02-13 19:03:56 +08:00
    2Nfree
        1
    2Nfree  
       9 天前
    这个是因为如果你默认不加域的情况下走的就是 dockerhub 或者你在 daemon.json 中配置的镜像代理地址,因为 docker 的 daemon.json 默认是只适配与 dockerhub 的,其他第三方的仓库不在他这个的配置范围内
    kyonn
        2
    kyonn  
    OP
       9 天前
    @2Nfree 我配置了 daemon.json 的 mirror 为 nexus 的 docker group 地址,不加域名前缀也能正常工作。但是如果拉的镜像是 非 dockerhub 的,nexus 好像就没办法处理,理论上,流量都发给 nexus 了,应该能处理才对。
    kyonn
        3
    kyonn  
    OP
       9 天前
    @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/)
    2Nfree
        4
    2Nfree  
       9 天前
    就是因为 daemon.json 默认是只适配与 dockerhub 的,所以例如 quay 或者 gcr 的相关都需要你添加代理仓库的前缀,你发的这个文章也是用的 dockerhub ,dockerhub 的代理是可以省去前面的域名的
    2Nfree
        5
    2Nfree  
       9 天前
    @2Nfree #4 修改一下,适配于 dockerhub 风格,quay.iogcr.ioghcr.io 这些与 dockerhub 的接口应该是不一致的,无法使用默认的无域名代理
    2Nfree
        6
    2Nfree  
       9 天前
    @kyonn #3 可以尝试一下,把代理区分开,不同的源仓库使用不同 nexus 仓库,这样例如你拉取 quay.io/xxx/xxx 镜像应该会走 quay.io 的代理
    XiLingHost
        7
    XiLingHost  
       9 天前
    添加多个 proxy 和一个 hosted ,最后用一个 group 作为提供服务的那个,就可以自动按顺序去 group 里排列的那些仓库里获取镜像了
    kyonn
        8
    kyonn  
    OP
       9 天前
    @2Nfree 直接指定 nexus 的地址前缀,是可以从 quay 、gcr 这些非 dockerhub 拉取的。
    kyonn
        9
    kyonn  
    OP
       9 天前
    @XiLingHost 现在就是这么做的,而且在 /etc/docker/daemon.json 配置 registry-mirrors 指向 nexus 所在机器的 docker group 地址。

    现在的疑问是直接 pull 镜像名,如果这个镜像在 dockerhub 有,那么工作正常,但是如果是 ghcr 这些非 dockerhub 独有的镜像,则 pull 命令无法拉到镜像,除非给镜像名前加上 nexus 地址前缀(这个地址对应 docker group )。


    包括 hosted 地址的私有镜像,也无法通过镜像名直接拉取,必须加上 nexus 地址前缀。
    XiLingHost
        10
    XiLingHost  
       9 天前
    有可能和设置里的 Docker Index 设置有关系,试试选择第一个 Use proxy registry
    kyonn
        11
    kyonn  
    OP
       9 天前
    @XiLingHost 除了 dockerhub 代理,其他代理设置的都是 Use proxy registry
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:14 · PVG 03:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.