No route to host兩個(gè)docker容器的服務(wù)訪問(wèn)不通的解決
問(wèn)題描述
如圖,我的兩個(gè)docker服務(wù)service1和service2位于同一臺(tái)服務(wù)器上,當(dāng)service1調(diào)用service2時(shí),報(bào)錯(cuò):
Failed to establish a new connection: [Errno 113] No route to host'
原因分析
- 我是在centos服務(wù)器上創(chuàng)建的docker容器,其網(wǎng)絡(luò)模式采用的是bridger模式。
- 啟動(dòng)docker時(shí),docker進(jìn)程會(huì)創(chuàng)建一個(gè)名為docker0的虛擬網(wǎng)橋,用于宿主機(jī)與容器之間的通信。當(dāng)啟動(dòng)一個(gè)docker容器時(shí),docker容器將會(huì)附加到虛擬網(wǎng)橋上,容器內(nèi)的報(bào)文通過(guò)docker0向外轉(zhuǎn)發(fā)。
- 如果docker容器訪問(wèn)宿主機(jī),那么docker0網(wǎng)橋?qū)?bào)文直接轉(zhuǎn)發(fā)到本機(jī),報(bào)文的源地址是docker0網(wǎng)段的地址。
- 而如果docker容器訪問(wèn)宿主機(jī)以外的機(jī)器,docker的SNAT網(wǎng)橋會(huì)將報(bào)文的源地址轉(zhuǎn)換為宿主機(jī)的地址,通過(guò)宿主機(jī)的網(wǎng)卡向外發(fā)送。
- 因此,當(dāng)docker容器訪問(wèn)宿主機(jī)時(shí),宿主機(jī)服務(wù)端口會(huì)被防火墻攔截,從而無(wú)法連通宿主機(jī),出現(xiàn)No route to host的錯(cuò)誤。
- 而訪問(wèn)宿主機(jī)所在局域網(wǎng)內(nèi)的其他機(jī)器,由于報(bào)文的源地址是宿主機(jī)ip,因此不會(huì)被目的機(jī)器防火墻攔截,所以可以訪問(wèn)。
解決辦法
解決辦法有兩種:
- 在防火墻上開(kāi)放指定端口(推薦),本文中的示例端口號(hào)為8033
firewall-cmd --zone=public --add-port=8033/tcp --permanent firewall-cmd --reload
- 關(guān)閉防火墻
systemctl stop firewalld
總結(jié)
- 我在服務(wù)器A上部署的服務(wù)調(diào)用其他服務(wù)器上的服務(wù),比如服務(wù)器B的service3服務(wù),是沒(méi)有問(wèn)題的,報(bào)文的源地址會(huì)轉(zhuǎn)換為宿主機(jī)的地址;
- 但是如果我訪問(wèn)宿主機(jī)的服務(wù),即服務(wù)器A上其他容器的服務(wù),報(bào)文的源地址是docker0網(wǎng)段的地址,宿主機(jī)服務(wù)端口會(huì)被防火墻攔截,從而出現(xiàn)No route to host的錯(cuò)誤,需要在防火墻上開(kāi)放指定端口來(lái)解決。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解
這篇文章主要介紹了Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12在Docker中更快地構(gòu)建Maven項(xiàng)目
本文主要介紹了在Docker中更快地構(gòu)建Maven項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10使用docker部署influxdb與 mongo的常用命令
這篇文章主要介紹了使用docker部署influxdb與 mongo的常用命令,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05Docker部署Mysql,.Net6,Sqlserver等容器
這篇文章介紹了Docker部署Mysql,.Net6,Sqlserver等容器的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12阿里云ECS(CentOS鏡像)安裝docker的實(shí)現(xiàn)步驟
本文主要介紹了阿里云ECS(CentOS鏡像)安裝docker的實(shí)現(xiàn)步驟,從準(zhǔn)備工作到實(shí)際安裝步驟,詳細(xì)解析每一步操作,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01docker之如何設(shè)置日志文件大小及個(gè)數(shù)
這篇文章主要介紹了docker之如何設(shè)置日志文件大小及個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn)
本文主要介紹了docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08