首页 电商资讯 体育资讯 医疗资讯 大数据 娱乐资讯 家居生活 站长资讯 房产资讯 科技资讯 it资讯 求职招聘 健康资讯 美食资讯 影视头条 创业交流 航空资讯
您当前的位置 :站长资讯 >  正文
Docker不能绑定静态的外网固定ip的问题及解决办法
http://linxianbiny.cn2020-09-12

前段时间,我一直在研究如何给Docker分配静态ip,主要的用途是让thrift进来和出来都走一个ip,还有就是爬虫可以独立ip地址,这样就很好的实现了爬虫的多ip方式… 但是随着nginx tcp的加入和开发了一个基于Python socket的ip轮询访问模块解决了这两个问题… 当然也不能因为这两问题,就丢弃这问题了….

在Docker run的时候,咱们可以添加-p参数来控制他的source来源ip。 下面的命令,对外来说,开放了192.168.1.200:9200的端口… 但是我们不仅仅满与此。 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武林网网站的支持!


营销策略干货 https://www.xiaobaoonline.com/academy
相关报道
Docker不能绑定静态的外网固定ip的问题及解决办法
看Godaddy主机何以成为国内市场霸主
做快照排名有效果么,发现很多营销站点,说是按天收费,关键是还要求本身排名就在10页以内。
蜘蛛一直只抓取首页,怎么才能更好的抓取到内容页
新域名是以前被K过的域名,想换新域名,怎么做?
甜椒刷机助手V3.3.0发布 三星板砖救星
可以看看这个网站怎么样吗
网站的顶级域名和一个网站下的两个二级域名同时交换链接,这样算作弊吗?
哪位大神给这个网站提点建议
织梦dedecms插件开发简明教程
 
 
 热门新闻
· 做快照排名有效果么,发现很多营销站点,说是按天收费,关键是还要求本身排名就在10页以内。
· 蜘蛛一直只抓取首页,怎么才能更好的抓取到内容页
· 哪位大神给这个网站提点建议
· 反反复复背后是搜狗联姻的大智慧
· 雷军vs周鸿祎,“天地对决”20年
· 谷歌前员工:皮查伊担任谷歌CEO命中注定
· 云计算催生IT产业投资新机会
· 从隔岸观火到全面拥抱:网易徐诗谈媒体业的移动…
· 新手运营网站指南:在SEO业站稳脚跟
· 关于当天收录的页面百度有排名,隔天排名就消失的现象
 推荐
· 搜外论坛可以通过购买获得带锚文本的签名吗?都有哪些规矩呢?
· 一直不会做大流量,还是企业站的水平。
· 谷歌的发展是搜索引擎内容营销的进化
· wordpress首页显示全文,怎么让它只显示文章部分内容
· 新域名是以前被K过的域名,想换新域名,怎么做?
· 甜椒刷机助手V3.3.0发布 三星板砖救星
· 可以看看这个网站怎么样吗
· OTA整合深水区:投资方推动携程去哪儿并购谈判
· 佳能、尼康、索尼业务相继下滑 开始寻找新的业务来源
· 解决帝国CMS中后台编辑器在IE10下的兼容问题
宏辉A网