docker容器内⽹络请求缓慢问题解决
在使⽤docker的过程中发现了⼏个问题,在docker⾥进⾏的⽹络请求经常会失败,⽐如npm install以及bundle install等操作,或者是作为中间层在应⽤中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker的⽹络机制,以解决⽹络请求太慢的问题。
⼀、docker的⽹络模式
1、none
ubuntu网络配置当配置为none时,docker容器⽹络⽆法输⼊输出,与世隔绝。
2、bridge
默认为bridge模式,docker有⾃⼰的虚拟⽹卡,通过桥接的⽅式从主机获得⽹络。
3、host
当指定为host时,主机的⽹卡直接暴露给了容器,直接通过主机的⽹络上⽹,⽐如要拿主机上的redis服务127.0.0.1:6357,就得通过这种⽅法,不过就⽐较不安全了。
4、container
使⽤其他容器的⽹络
⼆、docker的dns解析
docker容器本质上也是个linux,所以dns的解析⽅法和linux⼀样,优先是/etc/hosts⽂件,像localhost这种域名就是写在这个⽂件⾥,⽐如:
127.0.0.1 localhost
如果docker容器link了其他容器,这⾥也会多出link的域名,⽐如:
docker run --name app --link app-redis:redis -d ubuntu
就会在hosts⾥多出
172.17.0.3 app-redis 038c8388e4a1
完/etc/hosts⽂件,然后是/f⽂件:
domain local
nameserver 192.168.65.1
nameserver 192.168.65.10
三、解决docker容器⾥⽹络请求慢的问题
经过抓包测试等分析,发现⽹络请求慢,主要发⽣在dns解析中,所以主要采取dns优化:
如果请求的是⾃⼰内⽹的api, 可以直接修改/etc/hosts⽂件,如果是外⽹的请求可以通过更改/f⾥的nameserver实现。
docker容器肯定不是直接通过修改⽂件实现的,可以通过run的命令实现:
# 添加host
docker run --name app --add-host='bbnux:10.98.10.98' -d ubuntu
# 指定dns server
docker run --name app --dns=223.5.5.5 --dns=8.8.8.8 -d ubuntu
这样在docker容器⾥dns解析阶段的时间就被加速了
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论