docker容器內網絡請求緩慢問題解決
在使用docker的過程中發(fā)現(xiàn)了幾個問題,在docker里進行的網絡請求經常會失敗,比如npm install以及bundle install等操作,或者是作為中間層在應用中去獲取api數(shù)據(jù)的過程經常會出現(xiàn)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一樣,優(yōu)先是找/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容器里網絡請求慢的問題
經過抓包測試等分析,發(fā)現(xiàn)網絡請求慢,主要發(fā)生在dns解析中,所以主要采取dns優(yōu)化:
如果請求的是自己內網的api, 可以直接修改/etc/hosts文件,如果是外網的請求可以通過更改/etc/resolv.conf里的nameserver實現(xiàn)。
docker容器肯定不是直接通過修改文件實現(xiàn)的,可以通過run的命令實現(xiàn):
# 添加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解析階段的時間就被加速了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
在Windows系統(tǒng)下安裝docker窗口的配置過程
相信大家都知道Docker有很多種安裝的選擇,其中支持最好的是Ubuntu系統(tǒng)。而且docker如果想在windows上運行必須借助docker-machine,這篇文章將給大家詳細的介紹在Windows系統(tǒng)上安裝docker窗口的配置過程,有需要的朋友們可以參考借鑒。2016-10-10寶塔創(chuàng)建Docker容器配置nginx的實現(xiàn)步驟
本文主要介紹了寶塔創(chuàng)建Docker容器配置nginx的實現(xiàn)步驟,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06docker啟動mysql并映射數(shù)據(jù)目錄(含備份腳本)
本文主要介紹了docker啟動mysql并映射數(shù)據(jù)目錄(含備份腳本),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01zabbix監(jiān)控docker容器狀態(tài)【推薦】
這篇文章主要介紹了zabbix監(jiān)控docker容器狀態(tài)的相關資料,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06解決Docker刪除鏡像報錯:Error response from daemon:con
刪除Docker鏡像時遇到沖突,因為鏡像正在被一個運行中的容器使用,解決方法是先停止并刪除該容器,然后再嘗試刪除鏡像,此外,還可以選擇強制刪除鏡像,但這可能會導致數(shù)據(jù)丟失2024-11-11Docker容器如何訪問宿主機的Mysql數(shù)據(jù)庫
使用Docker能實現(xiàn)服務的容器化,并使用容器間網絡在它們之間進行通信,下面這篇文章主要給大家介紹了關于Docker容器如何訪問宿主機的Mysql數(shù)據(jù)庫,需要的朋友可以參考下2024-04-04