中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

一次centosDocker網(wǎng)橋模式無法訪問宿主機Redis服務(wù)的故障排除經(jīng)歷

服務(wù)器

背景:

城步網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,城步網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為城步上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的城步做網(wǎng)站的公司定做!

之前做了一個項目,需要在容器內(nèi)訪問宿主機提供的Redis 服務(wù)(這是一個比較常見的應(yīng)用場景哈), 常規(guī)方案:

① 主機網(wǎng)絡(luò)(docker run --network=host): 完全應(yīng)用主機網(wǎng)絡(luò)堆棧,在容器內(nèi)localhost就是指向宿主機

② 網(wǎng)橋網(wǎng)絡(luò)(docker run --network=bridge): 這也是docker容器默認的網(wǎng)絡(luò)通信模式,容器內(nèi)localhost 指向的是容器自身,不能使用 localhost 訪問宿主機上localhost:6379承載的Redis服務(wù) 。

docker會默認建立docker0 網(wǎng)橋;

網(wǎng)橋有一個網(wǎng)關(guān)ip, 有一個子網(wǎng)段; 網(wǎng)橋內(nèi)容器從子網(wǎng)段中確定容器ip( ip addr eth0), 網(wǎng)橋內(nèi)容器可通過 service name相互訪問;

網(wǎng)橋內(nèi)容器通過 docker0 Getway得以訪問外網(wǎng)。

不做騷操作,沿用常見的②網(wǎng)橋模式:

第一步:自定義網(wǎng)橋并應(yīng)用該自定義網(wǎng)橋

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_bridge
docker run --network=app_bridge --name ......

# 以下截取自docker-compose.yml文件
......
networks:
 default:
 name: app_bridge
 external: true

為啥不利用默認docker0網(wǎng)橋?

本文開頭已講: docker0 是默認網(wǎng)橋,新建的容器默認都會加入這個網(wǎng)橋,所以我們需要建立一個專屬于本程序的網(wǎng)橋app_bridge

第二步:容器內(nèi)建立 對應(yīng)于宿主機的別名

為實現(xiàn)在容器內(nèi)網(wǎng)橋模式訪問宿主機localhost:6379 的服務(wù), 必須搭配docker 提供的 --add-host 選項(對應(yīng)到docker-compose.yml這個配置是extra_host)。

docker run 的--add-host 選項能在 容器 /etc/hosts 文件增加行記錄,便于我們使用該名稱訪問其他網(wǎng)絡(luò)。

docker run -it --add-host dockerhost:172.16.1.1 ubuntu cat /etc/hosts
172.17.0.22 09d03f76bf2c
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
172.16.1.1 dockerhost

之后在程序的配置文件即可應(yīng)用 dockerhost:6379 訪問宿主機Redis服務(wù)。

------------------------------------------ 稍熟悉docker網(wǎng)絡(luò)模型的朋友應(yīng)該 都能理解并完成上述操作-----------------------------------------------------

一個狀況:

我在公司CentOS7機器上使用上述操作, 容器內(nèi)一直無法連通宿主機(容器間還是能正常訪問)。

簡化問題測試:新建容器,在容器內(nèi)嘗試ping docker0 網(wǎng)關(guān), 嗶了狗了,4臺公司機器都ping不通docker0網(wǎng)關(guān),外網(wǎng)還是正常訪問。

那這個問題就成了: 使用默認的docker0網(wǎng)橋,容器內(nèi)無法ping通docker0網(wǎng)關(guān),進而無法訪問宿主機。

呀呀呀呀, 八成是公司機器的配置問題 ~。。~

追問公司運維同學(xué),發(fā)現(xiàn):

Chain INPUT (policy DROP)

以上INPUT鏈的缺省策略是丟棄:從容器內(nèi)訪問宿主機的INPUT鏈規(guī)則并不匹配其中列出的任意一條,將被丟棄,所以我們從容器ping docker0網(wǎng)關(guān)會卡住收不到結(jié)果。

除非滿足列出的INPUT鏈規(guī)則,否則缺省的策略就是丟棄。

后面還有轉(zhuǎn)發(fā)和OUTPUT鏈缺省是 接受

這個策略的初衷是 服務(wù)器安全(尼瑪, 導(dǎo)致容器訪問宿主機的基礎(chǔ)能力都沒有了!?。。?。

運維方案:

① 使用 sudo service iptables stop 關(guān)閉iptables

② 把要使用的網(wǎng)橋網(wǎng)段加入 INPUT鏈

sudo iptables -I INPUT -s 172.17.0.0/16 -j ACCEPT

【接受docker0子網(wǎng)段172.17.0.0/16 INPUT】 加入規(guī)則, 傳送門

OK, That‘s All, 以后若有朋友在公司網(wǎng)絡(luò)遇到 默認網(wǎng)橋容器內(nèi)無法ping通網(wǎng)橋網(wǎng)關(guān),進而無法訪問宿主機,可參考本文排障。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對創(chuàng)新互聯(lián)的支持。

本文名稱:一次centosDocker網(wǎng)橋模式無法訪問宿主機Redis服務(wù)的故障排除經(jīng)歷
鏈接URL:http://www.rwnh.cn/article32/cpcosc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站設(shè)計、網(wǎng)站改版、網(wǎng)站制作網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
济阳县| 龙山县| 绥芬河市| 永州市| 佛山市| 闽侯县| 安顺市| 北流市| 仁寿县| 盐津县| 樟树市| 富川| 清水县| 寻甸| 临猗县| 贡觉县| 武定县| 宜宾市| 盐源县| 新源县| 静宁县| 舟山市| 承德县| 溧水县| 闵行区| 贡山| 合肥市| 乐至县| 黄平县| 江油市| 海口市| 怀仁县| 四会市| 蕉岭县| 广南县| 偃师市| 昆明市| 明水县| 肥乡县| 山阳县| 垫江县|