docker容器內(nèi)網(wǎng)絡(luò)請(qǐng)求緩慢問(wèn)題解決
在使用docker的過(guò)程中發(fā)現(xiàn)了幾個(gè)問(wèn)題,在docker里進(jìn)行的網(wǎng)絡(luò)請(qǐng)求經(jīng)常會(huì)失敗,比如npm install以及bundle install等操作,或者是作為中間層在應(yīng)用中去獲取api數(shù)據(jù)的過(guò)程經(jīng)常會(huì)出現(xiàn)timeout等情況,所以開(kāi)始探究docker的網(wǎng)絡(luò)機(jī)制,以解決網(wǎng)絡(luò)請(qǐng)求太慢的問(wèn)題。
一、docker的網(wǎng)絡(luò)模式
1、none
當(dāng)配置為none時(shí),docker容器網(wǎng)絡(luò)無(wú)法輸入輸出,與世隔絕。
2、bridge
默認(rèn)為bridge模式,docker有自己的虛擬網(wǎng)卡,通過(guò)橋接的方式從主機(jī)獲得網(wǎng)絡(luò)。
3、host
當(dāng)指定為host時(shí),主機(jī)的網(wǎng)卡直接暴露給了容器,直接通過(guò)主機(jī)的網(wǎng)絡(luò)上網(wǎng),比如要拿主機(jī)上的redis服務(wù)127.0.0.1:6357,就得通過(guò)這種方法,不過(guò)就比較不安全了。
4、container
使用其他容器的網(wǎng)絡(luò)
二、docker的dns解析
docker容器本質(zhì)上也是個(gè)linux,所以dns的解析方法和linux一樣,優(yōu)先是找/etc/hosts文件,像localhost這種域名就是寫(xiě)在這個(gè)文件里,比如:
127.0.0.1 localhost
如果docker容器link了其他容器,這里也會(huì)多出link的域名,比如:
docker run --name app --link app-redis:redis -d ubuntu
就會(huì)在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容器里網(wǎng)絡(luò)請(qǐng)求慢的問(wèn)題
經(jīng)過(guò)抓包測(cè)試等分析,發(fā)現(xiàn)網(wǎng)絡(luò)請(qǐng)求慢,主要發(fā)生在dns解析中,所以主要采取dns優(yōu)化:
如果請(qǐng)求的是自己內(nèi)網(wǎng)的api, 可以直接修改/etc/hosts文件,如果是外網(wǎng)的請(qǐng)求可以通過(guò)更改/etc/resolv.conf里的nameserver實(shí)現(xiàn)。
docker容器肯定不是直接通過(guò)修改文件實(shí)現(xiàn)的,可以通過(guò)run的命令實(shí)現(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解析階段的時(shí)間就被加速了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解決docker重啟redis,mysql數(shù)據(jù)丟失的問(wèn)題
這篇文章主要介紹了解決docker重啟redis,mysql數(shù)據(jù)丟失的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
docker環(huán)境搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái)的教程
這篇文章主要介紹了docker下搭建JMeter+Grafana+influxdb可視化性能監(jiān)控平臺(tái),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
Dockerfile構(gòu)建自定義鏡像的實(shí)現(xiàn)
Dockerfile構(gòu)建鏡像的方式就目前而言是使用最為廣泛的,本文主要介紹了Dockerfile構(gòu)建自定義鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Docker使用Bind9實(shí)現(xiàn)域名解析的思路詳解
這篇文章主要介紹了DOCKER使用BIND9實(shí)現(xiàn)域名解析,主要包括刷新服務(wù)修改配置文件信息,實(shí)現(xiàn)思路也很簡(jiǎn)單,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
docker中運(yùn)行PostgreSQL容器的簡(jiǎn)單步驟
這篇文章主要給大家介紹了關(guān)于docker中運(yùn)行PostgreSQL容器的簡(jiǎn)單步驟,隨著docker的廣泛應(yīng)用,為了提供便利的管理,PostgreSQL數(shù)據(jù)庫(kù)也支持docker的安裝方式,需要的朋友可以參考下2023-08-08
docker安裝java環(huán)境的實(shí)現(xiàn)步驟
這篇文章主要介紹了docker安裝java環(huán)境的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
安裝harbor作為docker鏡像倉(cāng)庫(kù)的問(wèn)題
這篇文章主要介紹了安裝harbor作為docker鏡像倉(cāng)庫(kù),主要包括docker和docker-compose離線(xiàn)部署,安裝harbor作為本地的倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Docker安裝Oracle創(chuàng)建表空間并導(dǎo)入數(shù)據(jù)庫(kù)完整步驟
Docker提供了一種簡(jiǎn)便的方式,通過(guò)容器化我們可以在任何支持Docker 的環(huán)境中快速部署Oracle數(shù)據(jù)庫(kù),這篇文章主要介紹了Docker安裝Oracle創(chuàng)建表空間并導(dǎo)入數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2025-04-04

