Docker部署Charles Proxy宿主机无法访问Web界面问题
问题诱因
- Charles的Web控制界面存在内置访问规则:只有当HTTP请求经过Charles代理通道发起时,访问
control.charles、localhost.charlesproxy.com这类内置域名才会返回Web UI内容;直接通过端口映射直连Charles的代理端口时,请求没有携带代理访问标识,会被Charles直接拒绝,返回连接错误。这也能解释为什么手机将代理指向宿主机Charles端口后可以正常访问界面——手机的请求全程走Charles代理通道,符合访问规则,而宿主机直连映射端口的请求不符合规则。 - 访问逻辑混淆:容器内8888端口是Charles的代理服务端口,并非供HTTP直连访问Web UI的服务端口,直接将宿主机端口映射到该端口后通过HTTP协议直连,本身就不符合Charles的设计访问逻辑。
- 参考的官方文档对应问题不匹配:你查阅的文档解决的是「Charles无法抓取本地localhost流量」的问题,和当前「直连代理端口无法访问Web UI」属于完全不同的故障场景,因此操作后无法解决问题。
修复步骤
- 先删除之前创建的异常容器:
docker rm -f [你之前设置的容器名称] - 重新创建容器,按需映射代理端口到宿主机:
如果用默认8888端口,执行命令:docker run -d -p 8888:8888 --name charles-proxy kurron/docker-charles-proxy
如果需要保留8890作为对外映射端口,执行命令:docker run -d -p 8890:8888 --name charles-proxy kurron/docker-charles-proxy - 配置宿主机浏览器的代理:将你用来访问界面的浏览器的HTTP/HTTPS代理设置为
127.0.0.1:[你映射的宿主机端口,即8888或8890]。如果不想修改全局系统代理,可以给浏览器安装独立的代理切换插件,仅让该浏览器走本地代理即可,避免影响其他应用的正常流量。 - 代理配置完成后,直接在浏览器地址栏输入
http://control.charles/即可正常访问Charles Web界面,不需要添加额外端口号,也不需要通过带端口的localhost.charlesproxy.com地址访问。
内容的提问来源于stack exchange,提问作者bassani2019
相关产品推荐
相关产品推荐

