摘要:?jiǎn)栴}起源在使用的過(guò)程中我不幸需要在容器中訪(fǎng)問(wèn)宿主機(jī)的端口而這個(gè)端口是另外一個(gè)容器端口映射出去的當(dāng)我在容器里通過(guò)的網(wǎng)橋訪(fǎng)問(wèn)宿主機(jī)時(shí)居然發(fā)現(xiàn)查找問(wèn)題原因可以確定的是容器與宿主機(jī)是有網(wǎng)絡(luò)連接的因?yàn)榭梢栽谌萜鲀?nèi)部通過(guò)通宿主機(jī)也可以在容器內(nèi)部訪(fǎng)問(wèn)其它
問(wèn)題起源
在使用 docker 的過(guò)程中我不幸需要在 docker 容器中訪(fǎng)問(wèn)宿主機(jī)的 80 端口, 而這個(gè) 80 端口是另外一個(gè)容器 8080 端口映射出去的. 當(dāng)我在容器里通過(guò) docker 的網(wǎng)橋 172.17.0.1 訪(fǎng)問(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)部訪(fǎng)問(wèn)其它內(nèi)網(wǎng)和外網(wǎng).
iptables 顯示也允許 docker 容器訪(fǎng)問(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ī)訪(fǎng)問(wèn), 但是不允許來(lái)自本機(jī)的 Docker 容器訪(fǎng)問(wèn). 必須通過(guò)設(shè)置 firewalld 規(guī)則允許本機(jī)的 Docker 容器訪(fǎng)問(wèn).
gypark 指出可以通過(guò)在 /etc/firewalld/zones/public.xml 中添加防火墻規(guī)則避免這個(gè)問(wèn)題:
注意這里的 172.17.0.0/16 可以匹配 172.17.xx.xx IP 段的所有 IP.
之后重啟下防火墻:
systemctl restart firewalld
之后就可以在 docker 容器內(nèi)部訪(fǎng)問(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)有類(lèi)似的問(wèn)題. 也就是說(shuō)容器可以直接通過(guò)172.17.0.1訪(fǎng)問(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ù)了.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27655.html
摘要:每個(gè)節(jié)點(diǎn)的網(wǎng)橋使用一個(gè)子網(wǎng),每個(gè)容器使用一個(gè)子網(wǎng)內(nèi)的,那么我們就可以組成下圖中所示網(wǎng)絡(luò)。到此,在的協(xié)調(diào)下,各個(gè)主機(jī)上的子網(wǎng)就不會(huì)再?zèng)_突了,另外,會(huì)維護(hù)容器網(wǎng)絡(luò)的路由規(guī)則,容器就可以通過(guò)訪(fǎng)問(wèn)容器了,也就實(shí)現(xiàn)了跨主機(jī)容器互聯(lián)。 當(dāng)您將多臺(tái)服務(wù)器節(jié)點(diǎn)組成一個(gè)Docker集群時(shí),需要對(duì)集群網(wǎng)絡(luò)進(jìn)行設(shè)置,否則默認(rèn)情況下,無(wú)法跨主機(jī)容器互聯(lián),接下來(lái)我們首先分析一下原因。 跨主機(jī)容器互聯(lián) 下圖描述了...
摘要:日志會(huì)顯示令牌過(guò)期的信息,隨后檢查主機(jī)和主機(jī)的時(shí)鐘是否同步。如果這個(gè)子網(wǎng)已經(jīng)被使用,你將需要更改網(wǎng)絡(luò)中使用的默認(rèn)子網(wǎng)。如果負(fù)載均衡器處于初始化狀態(tài),則很可能主機(jī)之間無(wú)法進(jìn)行跨主機(jī)通信。而一直顯示黃色初始化狀態(tài),說(shuō)明一直沒(méi)有通過(guò)健康檢查。 一、服務(wù)/容器 1、為什么我只能編輯容器的名稱(chēng)? Docker容器在創(chuàng)建之后就不可更改了。唯一可更改的內(nèi)容是我們要存儲(chǔ)的不屬于Docker容器本身的那...
摘要:而本文主要針對(duì)容器間的網(wǎng)絡(luò)通信方法進(jìn)行討論。而同屬于用戶(hù)自定義的容器之間自動(dòng)將所有端口暴露,方便容器間進(jìn)行無(wú)障礙的通信,而不會(huì)遭受到外界的意外訪(fǎng)問(wèn)。幾天前,為了解決日常在本地進(jìn)行日常工作和開(kāi)發(fā)測(cè)試之間的矛盾,利用docker在Windows系統(tǒng)中搭建了基于Linux的測(cè)試環(huán)境:借助Docker,在win10下編碼,一鍵在Linux下測(cè)試。在這邊文章里主要介紹了如何在本地通過(guò)docker構(gòu)建與...
閱讀 1493·2021-11-24 11:16
閱讀 2700·2021-07-28 12:32
閱讀 2309·2019-08-30 11:22
閱讀 1448·2019-08-30 11:01
閱讀 605·2019-08-29 16:24
閱讀 3553·2019-08-29 12:52
閱讀 1633·2019-08-29 12:15
閱讀 1340·2019-08-29 11:18