我在AWS EC2 Ubuntu实例中的docker容器内运行了一个Web服务器。当我向Web服务器发送请求时,我得到的响应非常缓慢(大多数时间超过20秒,尽管响应时间不同)。 虽然不会超时。 Web服务器非常轻量级。它只是为了测试,所以几乎什么都不做。
docker version 17.03.0-ce
docker-compose version 1.12.0-rc1
当从EC2实例中的 (url ='http:// localhost:xxxx / api')向Docker容器中运行的Web服务器发送请求时,它仍然很慢。所以不应该与从外部发送请求有关。
我在EC2中直接运行 (不在Docker容器中), 慢即可。它反应非常迅速。
我在EC2中的另一个Docker容器中运行另一个Web服务器,它也非常慢!
当我将来自docker容器中的的请求发送到其中运行的Web服务器(在其localhost中)时,它也非常慢 !
我在Mac计算机上使用相同的命令运行容器,获取响应并不慢!
以下是其中一个容器统计信息:
CPU %: 0.28%
MEM USAGE / LIMIT: 27.49 MiB / 992.5 MiB
MEM %: 2.77%
NET I/O: 53.7 kB / 30.5 kB
BLOCK I/O: 2.24 MB / 0 B
我知道可能很难知道这个问题。我的问题是调试原因并最终找到解决方案的步骤。如果您能详细解释您的方法,我将不胜感激。
答案 0 :(得分:0)
这听起来像名称解析问题。 要调试它,你可以做不同的事情。
您可以先在docker容器(已启动nc -l -p 8000
)中启动一个简单的tcp服务器-p 8000:8000
,然后在主机启动时启动nc 127.0.0.1 8000
,输入一些charachter,看看TCP通信是否有效,它们应该出现在容器中。
接下来,您可以像以前一样使用“localhost”代替127.0.0.1
在此之后,您可以执行相同的HTTP请求,但使用127.0.0.1
代替localhost
(这会将请求的Host:
标头设置为相同的值,网络服务器可能无法检查,或者可能更容易解决。)
您还可以查看容器中生成的/etc/hosts
和/etc/resolv.conf
。也许它们在容器的网络环境中没有意义。
此外,您可以精确测量您的请求所需的时间,如果它们接近精确的秒数,这听起来更像DNS超时(如果它是5.003,10.200,20.030秒,它就像X秒超时,加上回应所需的实时时间)。