(我使用的是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
作为不安全的注册表:
一切正常(docker引擎可以点击我的本地注册表)如果我
不要
为docker引擎设置代理。
例如,我可以
docker pull host.docker.internal:8080/busybox
我的代理人提出了这些要求:
情况2:设置docker引擎的代理,从docker hub中提取图像
当我把docker引擎指向mitmproxy(
host.docker.internal:5000
)然后做一个
docker pull library/mysql
,也很好(我可以看到index.docker.io索引)
情况3:设置docker引擎代理,从docker hub中提取图像
所以当我把情景1+2结合起来,它把docker引擎指向我笔记本电脑上的mitmproxy作为代理,然后试图使用
docker拉主机.docker.internal:8080/总线箱
以前也起过作用,
它失败了
:
服务器连接到('主机.docker.internal'8080)失败:连接到'主机.docker.internal“:[Errno 8]提供了nodename或servname,或者不知道
我的代理看到的错误是它找不到
host.docker.internal
. 我不知道这是不是因为mitmproxy在我的Mac主机操作系统上运行(而不是在docker虚拟机内),这就是它无法解析主机的原因。
我基本上无法使用mitmproxy(在我的Mac主机操作系统上)来窥探docker引擎请求,也无法同时运行注册表(在我的Mac主机操作系统上)。
我也尝试将注册表移到一个容器中,并将主机名更改为
gateway.docker.internal
,但也没有运气。
有什么办法实现这个目标吗?