這篇文章主要介紹了詳解如何解決docker容器無(wú)法通過IP訪問宿主機(jī)問題,,小編覺得挺不錯(cuò)的,,現(xiàn)在分享給大家,也給大家做個(gè)參考,。一起跟隨小編過來看看吧 問題起源 在使用 docker 的過程中我不幸需要在 docker 容器中訪問宿主機(jī)的 80 端口, 而這個(gè) 80 端口是另外一個(gè)容器 8080 端口映射出去的. 當(dāng)我在容器里通過 docker 的網(wǎng)橋 172.17.0.1 訪問宿主機(jī)時(shí), 居然發(fā)現(xiàn):
查找問題原因 可以確定的是容器與宿主機(jī)是有網(wǎng)絡(luò)連接的, 因?yàn)榭梢栽谌萜鲀?nèi)部通過 172.17.0.1 Ping 通宿主機(jī):
也可以在容器內(nèi)部訪問其它內(nèi)網(wǎng)和外網(wǎng). iptables 顯示也允許 docker 容器訪問:
之后在查找一些資料后發(fā)現(xiàn)這個(gè)問題: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ī)訪問, 但是不允許來自本機(jī)的 Docker 容器訪問. 必須通過設(shè)置 firewalld 規(guī)則允許本機(jī)的 Docker 容器訪問. gypark 指出可以通過在 /etc/firewalld/zones/public.xml 中添加防火墻規(guī)則避免這個(gè)問題:
注意這里的 之后重啟下防火墻:
之后就可以在 docker 容器內(nèi)部訪問宿主機(jī) 80 端口. 其它問題 實(shí)際上當(dāng)我又用 vmware 新開了一臺(tái)虛擬機(jī)希望能重現(xiàn)這個(gè)問題的時(shí)候, 發(fā)現(xiàn)在新的虛擬機(jī)上居然沒有類似的問題. 也就是說容器可以直接通過 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助 |
|