郑州制作网站设计,WordPress图片生成文章,汉口网站关键词排名,怎么投诉网站制作公司在使用Docker 18.03.1-ce版本在Ubuntu 18.04 LTS上运行多个Docker容器时#xff0c;我发现当使用requests库发送请求到某个主机名时#xff0c;响应速度非常慢。在本例中#xff0c;每个容器都有自己的CherryPy服务器#xff0c;并通过requests.get(http://main:8083)或req…
在使用Docker 18.03.1-ce版本在Ubuntu 18.04 LTS上运行多个Docker容器时我发现当使用requests库发送请求到某个主机名时响应速度非常慢。在本例中每个容器都有自己的CherryPy服务器并通过requests.get(http://main:8083)或requests.get(http://controller:8082)的方式进行通信。所有的容器都属于一个Docker Compose stack并由docker-compose创建了一个公共网络。
同样问题也出现在运行Windows操作系统的主机机器上尝试获取一个本地页面时请求工作正常。
值得注意的是这个问题只在Ubuntu 18.04 LTS上运行的Docker主机上不存在如果在主机机器运行bench.py程序无论使用localhost还是127.0.0.1都能正常工作。
解决方案
为了更好地理解问题我们使用了bench.py程序该程序使用了urllib3和requests两个库发送请求并记录响应时间。
1. 对于urllib3
我们首先使用urllib3库的PoolManager发送GET请求到localhost和127.0.0.1并记录响应时间。结果显示无论是localhost还是127.0.0.1响应时间都很短。
2. 对于requests
然后我们使用requests库的get方法发送GET请求到localhost和127.0.0.1并记录响应时间。结果显示无论是localhost还是127.0.0.1响应时间都很短。
通过对比urllib3和requests的响应时间我们可以看到问题可能出在requests库中。
然后我们查阅了requests库的文档发现requests库使用了urllib3库来进行HTTP请求。因此我们猜测问题可能出在urllib3库上。
我们进一步查阅了urllib3库的文档发现urllib3库在处理DNS解析时会使用系统的DNS缓存。因此我们猜测问题可能出在系统的DNS缓存上。
为了解决问题我们可以通过以下步骤来解决
1. 首先我们可以在Docker主机上运行以下命令来清除DNS缓存
shell docker-compose run --rm --networkcompose_default bench bench.py
其中bench是我们的Docker容器的名字bench.py是我们的bench程序。
2. 然后我们可以在Docker主机上运行以下命令来检查DNS缓存
shell docker-compose run --rm --networkcompose_default bench bench.py