濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題

詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題

熱門(mén)標(biāo)簽:外呼系統(tǒng)的經(jīng)營(yíng)范圍 智能電話機(jī)器人坐席 安陽(yáng)ai電銷(xiāo)機(jī)器人軟件 云會(huì)外呼系統(tǒng) 申請(qǐng)400電話價(jià)格多少 廈門(mén)營(yíng)銷(xiāo)外呼系統(tǒng)平臺(tái) 柳州市機(jī)器人外呼系統(tǒng)報(bào)價(jià) 外呼系統(tǒng)不彈窗 涪陵商都400電話開(kāi)通辦理

問(wèn)題起源

在使用 docker 的過(guò)程中我不幸需要在 docker 容器中訪問(wèn)宿主機(jī)的 80 端口, 而這個(gè) 80 端口是另外一個(gè)容器 8080 端口映射出去的. 當(dāng)我在容器里通過(guò) docker 的網(wǎng)橋 172.17.0.1 訪問(wèn)宿主機(jī)時(shí), 居然發(fā)現(xiàn):

curl: (7) Failed to connect to 172.17.0.1 port 80: No route to host

查找問(wèn)題原因

可以確定的是容器與宿主機(jī)是有網(wǎng)絡(luò)連接的, 因?yàn)榭梢栽谌萜鲀?nèi)部通過(guò) 172.17.0.1 Ping 通宿主機(jī):

root@930d07576eef:/# ping 172.17.0.1
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.130 ms

也可以在容器內(nèi)部訪問(wèn)其它內(nèi)網(wǎng)和外網(wǎng).

iptables 顯示也允許 docker 容器訪問(wèn):

# iptables --list | grep DOCKER
DOCKER-ISOLATION all -- anywhere       anywhere      
DOCKER   all -- anywhere       anywhere      
Chain DOCKER (1 references)
Chain DOCKER-ISOLATION (1 references)

之后在查找一些資料后發(fā)現(xiàn)這個(gè)問(wèn)題:NO ROUTE TO HOST network request from container to host-ip:port published from other container.

解釋

正如 Docker Community Forms 所言, 這是一個(gè)已知的 Bug, 宿主機(jī)的 80 端口允許其它計(jì)算機(jī)訪問(wèn), 但是不允許來(lái)自本機(jī)的 Docker 容器訪問(wèn). 必須通過(guò)設(shè)置 firewalld 規(guī)則允許本機(jī)的 Docker 容器訪問(wèn).

gypark 指出可以通過(guò)在 /etc/firewalld/zones/public.xml 中添加防火墻規(guī)則避免這個(gè)問(wèn)題:

<rule family="ipv4">
  <source address="172.17.0.0/16" />
  <accept />
</rule>

注意這里的 172.17.0.0/16 可以匹配 172.17.xx.xx IP 段的所有 IP.

之后重啟下防火墻:

systemctl restart firewalld

之后就可以在 docker 容器內(nèi)部訪問(wèn)宿主機(jī) 80 端口.

其它問(wèn)題

實(shí)際上當(dāng)我又用 vmware 新開(kāi)了一臺(tái)虛擬機(jī)希望能重現(xiàn)這個(gè)問(wèn)題的時(shí)候, 發(fā)現(xiàn)在新的虛擬機(jī)上居然沒(méi)有類似的問(wèn)題. 也就是說(shuō)容器可以直接通過(guò)172.17.0.1訪問(wèn)宿主機(jī) 80 端口, 查看防火墻配置也沒(méi)看到有172.17.xx.xx的白名單.
猜測(cè)是由于在新的虛擬機(jī)安裝的 docker 是 Docker version 1.12.5, build 047e51b/1.12.5, 也就是 Red Hat 從 docker 開(kāi)源版本遷出開(kāi)發(fā)的版本, 而之前的是 Docker version 17.06.2-ce, build cec0b72 屬于 Docker-CE, 可能是 docker 版本有差異, Red Hat 順便把那個(gè) Known Bug 修復(fù)了.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:綏化 撫順 孝感 蕪湖 福州 南充 巴中 晉城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題》,本文關(guān)鍵詞  詳解,如何,解決,docker,容器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解如何解決docker容器無(wú)法通過(guò)IP訪問(wèn)宿主機(jī)問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    沂水县| 嘉鱼县| 图木舒克市| 柘城县| 怀远县| 永吉县| 洛南县| 郧西县| 龙胜| 申扎县| 德兴市| 焉耆| 逊克县| 荃湾区| 恩施市| 揭东县| 弥渡县| 绥德县| 昌吉市| 马公市| 特克斯县| 聂拉木县| 大兴区| 梁河县| 郸城县| 长沙市| 和林格尔县| 桦南县| 云龙县| 邹平县| 邢台市| 德庆县| 神池县| 云梦县| 天祝| 白山市| 北流市| 昭通市| 神池县| 鲁山县| 普宁市|