国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

Docker不能綁定靜態的外網固定ip的問題及解決辦法

2024-09-01 13:50:18
字體:
來源:轉載
供稿:網友

前段時間,我一直在研究如何給Docker分配靜態ip,主要的用途是讓thrift進來和出來都走一個ip,還有就是爬蟲可以獨立ip地址,這樣就很好的實現了爬蟲的多ip方式…  但是隨著nginx tcp的加入和開發了一個基于Python socket的ip輪詢訪問模塊解決了這兩個問題…  當然也不能因為這兩問題,就丟棄這問題了….

在Docker run的時候,咱們可以添加-p參數來控制他的source來源ip。   下面的命令,對外來說,開放了192.168.1.200:9200的端口…  但是我們不僅僅滿與此。 docker run -p 端口的實現,就是借用iptables來實現的…   我們iptables -t nat -L 的時候,就能看到docker幫我做好的nat關系…. docker做iptables的prerouting的時候,是追加了名叫docker的自定義鏈條…      差點又跑題了,如果是橋接模式,那么就致使當我們如果容器里面端口的變動比較大的時候,那么就會造成改動端口映射的操作的復雜性,需要每次的變更,做一個iptables prerouting映射…    但是如果你選擇HOST網絡模式,那么你又不好確定你的app綁定的是哪個ip地址,不是什么服務端都支持bind ip地址的… 有些搓蛋的服務端就默認綁定第一個ip地址…    這個時候,為docker容器分配一個獨立的靜態ip地址就顯得很有必要了….  反正就一個ip地址,你可勁的折騰…..   

Pythondocker run -it -p 192.168.1.200:9200:9200 redis_cluster 9200Pythonroot@ubuntu:~# iptables -t nat -L -nChainPREROUTING(policyACCEPT)target  protoptsource       destinationDOCKER  all -- 0.0.0.0/0      0.0.0.0/0      ADDRTYPEmatchdst-typeLOCALChainINPUT(policyACCEPT)target  protoptsource       destinationChainOUTPUT(policyACCEPT)target  protoptsource       destinationDOCKER  all -- 0.0.0.0/0     !127.0.0.0/8     ADDRTYPEmatchdst-typeLOCALChainPOSTROUTING(policyACCEPT)target  protoptsource       destinationMASQUERADE all -- 172.17.0.0/16    0.0.0.0/0MASQUERADE all -- 172.17.0.0/16   !172.17.0.0/16MASQUERADE tcp -- 172.17.0.1     172.17.0.1     tcpdpt:9200ChainDOCKER(2references)target  protoptsource       destinationDNAT   tcp -- 0.0.0.0/0      0.0.0.0/0      tcpdpt:9200to:172.17.0.1:9200

需要注意的是,docker run創建一個容器的時候,一定要把他的網卡模式改成docker的none…  一般在docker自定義網絡的時候,都會把–net=none,再通過后期的一頓折騰讓docker的容器有網絡…..

接著,我如果想給容器,徹底的分配一個外網ip,或者管理ip,反正就一個靜態的獨立ip,怎么破? 用pipework是可以實現的。 但這東西稍復雜些,我們就先用系統的ip netns來解決…. 通過inspect我們知道了他的state pid .

Python

root@ubuntu:~# docker ps -aCONTAINER ID    IMAGE        COMMAND        CREATED       STATUS       PORTS        NAMES232621e9e9fb    redis_cluster    "/app/manage.sh 9000  41 minutes ago   Up 41 minutes              agitated_blackwellroot@ubuntu:~# docker inspect -f "{{.State.Pid}}" 232621e9e9fb4777root@ubuntu:~# pid=4777

那么我們來開始綁定靜態ip地址,先別看原理,暫時照著做…

Python

mkdir-p/var/run/netnsln-s/proc/$pid/ns/net/var/run/netns/$pidiplinkaddAtypevethpeernameBbrctladdifdocker0AiplinksetAupiplinksetBnetns$pidipnetnsexec$pidiplinksetdevBnameeth0ipnetnsexec$pidiplinkseteth0upipnetnsexec$pidipaddradd192.168.1.200/24deveth0ipnetnsexec$pidiprouteadddefaultvia192.168.1.1

這些都結束了后,我們會發現容器的網卡里面從一個lo,多出一個eth0網卡,網卡的ip地址正是我們剛才綁定的192.168.1.200

Python

bash-4.1# ip a1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN  link/loopback00:00:00:00:00:00brd00:00:00:00:00:00  inet127.0.0.1/8scopehostlo   valid_lftforeverpreferred_lftforever  inet6::1/128scopehost   valid_lftforeverpreferred_lftforever22:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000  link/etherca:aa:87:05:c9:5abrdff:ff:ff:ff:ff:ff  inet192.168.1.200/24scopeglobaleth0   valid_lftforeverpreferred_lftforever  inet6fe80::c8aa:87ff:fe05:c95a/64scopelink   valid_lftforeverpreferred_lftforeverbash-4.1#

到此為止,docker綁定固定的靜態ip的方法已經說明白了….   看了文章后,會發現docker綁定ip是比較的簡單..  docker的網絡是不怎么好理解的,這兩天我多專供下docker分配ip的整個流程 (docker iptables)

以上所述是小編給大家介紹的Docker不能綁定靜態的外網固定ip的問題及解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘乡市| 三河市| 手游| 永登县| 昆山市| 涟水县| 临高县| 梁河县| 酒泉市| 高阳县| 嘉善县| 布尔津县| 伊金霍洛旗| 郸城县| 汶川县| 阳高县| 东港市| 鹤岗市| 明光市| 商城县| 宾阳县| 宝兴县| 鹰潭市| 侯马市| 古浪县| 桃源县| 石门县| 聂荣县| 胶南市| 论坛| 涪陵区| 兴宁市| 佛山市| 茂名市| 嵊州市| 双桥区| 马公市| 石嘴山市| 荔浦县| 仲巴县| 合肥市|