我在 Windows 配置上使用默认的 docker,并运行配置这样的应用程序:
docker run -d -p 8080:80 --name openproject ...
我可以使用浏览器访问应用程序,但在 fiddler 中我看不到 docker 容器的流量。我看到其他流量,因此我假设浏览器具有正确的代理设置。
我已经在docker设置中将代理设置为fiddler(http://127.0.0.1:8888),但fiddler仍然看不到容器中的任何内容。
如果您想查看退出容器的流量,请将其添加到您的 Dockerfile 中:
ENV http_proxy "http://host.docker.internal:8888/"
ENV https_proxy "http://host.docker.internal:8888/"
Linux 容器中的 http_proxy 和 https_proxy 环境变量应为小写,这与某些 Docker 文档的说法相反 (https://unix.stackexchange.com/questions/212894/whats-the-right-format-for- the-http-proxy-environment-variable-caps-or-no-ca)
host.docker.internal 将您快捷地指向主机使用的内部 IP 地址 (https://docs.docker.com/docker-for-windows/networking/)。
端口 8888 是 Fiddler 在主机中监听的端口。 (8888 是默认值。)
您可以通过查找 Docker 主机(在 Hyper-V 上运行的虚拟机)的 IP 地址来做到这一点。只需在命令 shell 上运行“ipconfig”即可。
默认IP地址可能是10.0.75.1(至少在我的机器上是这样)。
因此,不要使用 http://localhost:8080 浏览到 http://10.0.75.1:8080,fiddler 将获取流量。
就我而言,设置
http_proxy
env。不起作用。 HTTPS 流量仍然是加密的,并在 Fiddler 中标记为 Tunnel to
。
经过简短分析,似乎无法解密来自 Docker 的 HTTPS 流量。
解决方案是将fiddler根证书导入到Docker容器中:
在 Fiddler 选项中标记“捕获 HTTPS CONNECT”和“解密 HTTPS 流量”选项
将证书复制到 docker 容器 CA 存储中。
docker cp C:\Users\user-name\Desktop\FiddlerRoot.cer your-container-
id:/usr/local/share/ca-certificates/fiddlerPublicCert.cer
在正在运行的容器中安装 CA 证书。
docker exec -u root -it your-container-
id update-ca-certificates