当前位置: 首页 > 编程笔记 >

docker容器内网络请求缓慢问题解决

宋原
2023-03-14
本文向大家介绍docker容器内网络请求缓慢问题解决,包括了docker容器内网络请求缓慢问题解决的使用技巧和注意事项,需要的朋友参考一下

在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,比如npm install以及bundle install等操作,或者是作为中间层在应用中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker的网络机制,以解决网络请求太慢的问题。

一、docker的网络模式

1、none

当配置为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文件,然后是/etc/resolv.conf文件:

domain local
nameserver 192.168.65.1
nameserver 192.168.65.10

三、解决docker容器里网络请求慢的问题

经过抓包测试等分析,发现网络请求慢,主要发生在dns解析中,所以主要采取dns优化:

如果请求的是自己内网的api, 可以直接修改/etc/hosts文件,如果是外网的请求可以通过更改/etc/resolv.conf里的nameserver实现。

docker容器肯定不是直接通过修改文件实现的,可以通过run的命令实现:

# 添加host
docker run --name app --add-host='api.embbnux.com: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解析阶段的时间就被加速了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍解决npm安装Electron缓慢网络超时导致失败的问题,包括了解决npm安装Electron缓慢网络超时导致失败的问题的使用技巧和注意事项,需要的朋友参考一下 Electron 框架的前身是 Atom Shell,可以让你写使用 JavaScript,HTML 和CSS 构建跨平台的桌面应用程序。它是基于io.js 和 Chromium 开源项目,小编碰到npm安装Electron

  • 本文向大家介绍Ajax请求如何解决浏览器缓存问题?相关面试题,主要包含被问及Ajax请求如何解决浏览器缓存问题?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。 在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-C

  • Mpx提供了网络请求库fetch,抹平了微信,阿里等平台请求参数及响应数据的差异;同时支持请求拦截器,请求取消等 使用说明 import mpx from '@mpxjs/core' import mpxFetch from '@mpxjs/fetch' mpx.use(mpxFetch) // 第一种访问形式 mpx.xfetch.fetch({ url: 'http://xxx.com' }

  • 在我的Scala/Play应用程序中,我有一个对SOAP API的简单调用: 输出我设置的右侧标题: 但是我调用的远程SOAP API以响应: 我已经检查了用wireshark发送的请求,事实上,标头是错误的: 在这种情况下,为什么我设置的内容类型被忽略?我该如何修复它? 更新:我想我已经了解了一些事情: SOAPPart对象是MIME部件,具有MIME头内容Id、内容位置和内容类型。因为内容类型

  • 我有一个带有持久卷的WordPress和MySQL容器。我一直在努力学习docker,并在学习过程中错误地删除了老docker撰写。yml和mysql卷之外的所有卷。我现在已经尽我所能将其重新创建到compose文件中,但每当我启动机器时,它都无法连接到MySQL服务器。有谁能指出我哪里做错了。 我怀疑我对两者之间的联系有问题,但我不确定。 docker-compose.yml: 日志:

  • 问题内容: 我正在尝试摆脱配置中已弃用的Docker链接。当我重新创建容器时,剩下的就是摆脱那些nginx反向代理错误。 注意:我正在桥接模式下使用Docker网络。() 我在nginx中使用以下配置代码段: 我在Docker网络上以name 为主机名启动了一个容器。 然后,我在网络上启动了Nginx容器。 我可以从Nginx容器内ping 在nginx容器的文件中列出 Nginx日志说 我试过泊