一、問(wèn)題描述
docker中有的時(shí)候需要從容器內(nèi)向外網(wǎng)環(huán)境進(jìn)行訪問(wèn),這個(gè)時(shí)候我邊出現(xiàn)了一個(gè)詭異的問(wèn)題,從容器的宿主機(jī)直接通過(guò)curl命令使用域名可以正常的訪問(wèn)并返回正確的解決,但是從容器中向外調(diào)用外網(wǎng)環(huán)境的這個(gè)域名的時(shí)候,curl命令會(huì)被卡住,一直到超時(shí)都沒(méi)有任何返回?cái)?shù)據(jù),但是一個(gè)很神奇的事情是,如果將該域名換成對(duì)應(yīng)的IP的時(shí)候,從容器內(nèi)向外調(diào)用外網(wǎng)環(huán)境的這個(gè)IP的時(shí)候,這個(gè)時(shí)候就可以正確的返回結(jié)果
調(diào)用正常:
調(diào)用無(wú)響應(yīng):
二、問(wèn)題根因
出現(xiàn)了上面的問(wèn)題,通過(guò)查看調(diào)用命令返回的結(jié)果,發(fā)現(xiàn)出現(xiàn)該問(wèn)題的主要原因是由于在域名調(diào)用的過(guò)程中會(huì)出現(xiàn)在容器內(nèi)域名無(wú)法解析的問(wèn)題.
三、解決辦法
3.1 查看docker容器的虛擬網(wǎng)橋配置
docker network ls
如果是通過(guò)run命令來(lái)啟動(dòng)容器的話,只需要增加 --net=host這個(gè)參數(shù),具體命令如下所示:
docker run -d --net=host --name nginx-1 nginx:latest
下面我們來(lái)講解一下上面的這個(gè)啟動(dòng)命令中增加 –net=host這個(gè)配置參數(shù)的作用,該配置的作用主要是表明該容器不會(huì)虛擬自己的網(wǎng)卡,配置自己的IP,而是使用宿主機(jī)的IP和端口,所以使用這個(gè)命令的時(shí)候,docker run命令中的 -p也會(huì)失效,因?yàn)樗緛?lái)就使用的是宿主機(jī)的IP和端口,根本無(wú)需進(jìn)行端口映射,通過(guò)上面的配置,我們便可以從容器內(nèi)通過(guò)域名正常的訪問(wèn)外網(wǎng)環(huán)境啦
四、知識(shí)點(diǎn)補(bǔ)充
通過(guò)上面碰到的這個(gè)問(wèn)題,我們知道了docker容器網(wǎng)絡(luò)模式相關(guān)的一些東西,接下來(lái)我們就來(lái)拓展一下docker網(wǎng)絡(luò)模式的詳細(xì)內(nèi)容。
docker自身有四種網(wǎng)絡(luò)模式,還有一些自定義的網(wǎng)絡(luò)模式,我們今天主要來(lái)了解一下自身的四種網(wǎng)絡(luò)模式
Host:容器使用宿主機(jī)的網(wǎng)卡是IP端口,不會(huì)虛擬自己的網(wǎng)卡,也不會(huì)配置自己的IP;設(shè)置命令如下:
docker run --net=host
Container:容器不會(huì)虛擬自己的網(wǎng)卡,也不會(huì)配置自己的IP,而是和一個(gè)指定容器共享IP和端口范圍。
docker run --net=container:containerName/containerId
None:關(guān)閉容器網(wǎng)絡(luò)功能。
docker run --net=none
Bridge:該模式會(huì)為每一個(gè)容器虛擬網(wǎng)卡并設(shè)置IP,并將容器連接到宿主機(jī)中創(chuàng)建好的docker0虛擬網(wǎng)橋,通過(guò)docker0網(wǎng)橋以及Iptables nat表配置與宿主機(jī)通信
docker run --net=bridge
在啟動(dòng)容器的時(shí)候,我們可以通過(guò) –net 參數(shù)來(lái)指定使用哪種網(wǎng)絡(luò)模式,默認(rèn)docker容器會(huì)使用 bridge 網(wǎng)絡(luò)模式
通過(guò)下面的幾個(gè)命令,我們可以查看每一種網(wǎng)絡(luò)往事的詳細(xì)信息:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-473864.html
查看 bridge 網(wǎng)絡(luò)模式詳情文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473864.html
docker network inspect bridge
到了這里,關(guān)于docker內(nèi)無(wú)法通過(guò)域名訪問(wèn)外網(wǎng)問(wèn)題解決方案一的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!