代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

如何在docker for Mac查询运行在macOS上的本地注册表时窥探docker pull请求?

  •  0
  • ahmet alp balkan  · 技术社区  · 7 年前

    (我使用的是Docker for Mac版本2.0.0.3(31259),它有Docker引擎18.09.2。)

    我想这样做:

    • 在我的mac上直接在端口8080上运行一个docker注册表进程(它不是真正的docker注册表,而是一些看起来像注册表的东西,所以应该不重要)没有HTTPS
    • 运行 mitmproxy 在我的mac上直接在端口5000上(拦截请求)
    • 将docker引擎配置为使用mitmproxy,以便我可以窥探请求
    • 启动 docker pull

    情况1:docker引擎上没有设置代理

    如前所述,我有一个服务器,它模拟docker registry v2 API,直接在我的MacOS端口8080上运行。所以我补充说 host.docker.internal:8080 作为不安全的注册表:

    screenshot

    一切正常(docker引擎可以点击我的本地注册表)如果我 不要 为docker引擎设置代理。 例如,我可以 docker pull host.docker.internal:8080/busybox 我的代理人提出了这些要求:

    screenshot

    情况2:设置docker引擎的代理,从docker hub中提取图像

    当我把docker引擎指向mitmproxy( host.docker.internal:5000 )然后做一个 docker pull library/mysql ,也很好(我可以看到index.docker.io索引)

    screenshot

    screenshot

    情况3:设置docker引擎代理,从docker hub中提取图像

    所以当我把情景1+2结合起来,它把docker引擎指向我笔记本电脑上的mitmproxy作为代理,然后试图使用 docker拉主机.docker.internal:8080/总线箱 以前也起过作用, 它失败了 :

    服务器连接到('主机.docker.internal'8080)失败:连接到'主机.docker.internal“:[Errno 8]提供了nodename或servname,或者不知道

    screenshot

    我的代理看到的错误是它找不到 host.docker.internal . 我不知道这是不是因为mitmproxy在我的Mac主机操作系统上运行(而不是在docker虚拟机内),这就是它无法解析主机的原因。

    我基本上无法使用mitmproxy(在我的Mac主机操作系统上)来窥探docker引擎请求,也无法同时运行注册表(在我的Mac主机操作系统上)。

    我也尝试将注册表移到一个容器中,并将主机名更改为 gateway.docker.internal ,但也没有运气。

    有什么办法实现这个目标吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   David Gageot    7 年前

    你试过添加 127.0.0.1 host.docker.internal 去你的mac /etc/hosts ? 它似乎对我有用。

    • Docker虚拟机解析 host.docker.internal:5000 到 192.168.65.2:5000 它连接到Mac上的mitm代理运行,
    • mitm代理不知道如何解决 host.docker.internal ,因此 nodename nor servname provided, or not known 错误,
    • 通过将条目添加到 /etc/主机 ,告诉mitm实际连接到本地主机以访问注册表。
    推荐文章