前段时间,我一直在研究如何给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地址,你可劲的折腾…..
Python docker run -it -p 192.168.1.200:9200:9200 redis_cluster 9200 Python root@ubuntu:~# iptables -t nat -L -n ChainPREROUTING(policyACCEPT) target protoptsource destination DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPEmatchdst-typeLOCAL ChainINPUT(policyACCEPT) target protoptsource destination ChainOUTPUT(policyACCEPT) target protoptsource destination DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPEmatchdst-typeLOCAL ChainPOSTROUTING(policyACCEPT) target protoptsource destination MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0 MASQUERADE all -- 172.17.0.0/16 !172.17.0.0/16 MASQUERADE tcp -- 172.17.0.1 172.17.0.1 tcpdpt:9200 ChainDOCKER(2references) target protoptsource destination DNAT 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 232621e9e9fb redis_cluster "/app/manage.sh 9000 41 minutes ago Up 41 minutes agitated_blackwell root@ubuntu:~# docker inspect -f "{{.State.Pid}}" 232621e9e9fb 4777 root@ubuntu:~# pid=4777
那么我们来开始绑定静态ip地址,先别看原理,暂时照着做…
Python
mkdir-p/var/run/netns ln-s/proc/$pid/ns/net/var/run/netns/$pidiplinkaddAtypevethpeernameB brctladdifdocker0A iplinksetAup iplinksetBnetns$pid ipnetnsexec$pidiplinksetdevBnameeth0 ipnetnsexec$pidiplinkseteth0up ipnetnsexec$pidipaddradd192.168.1.200/24deveth0 ipnetnsexec$pidiprouteadddefaultvia192.168.1.1
这些都结束了后,我们会发现容器的网卡里面从一个lo,多出一个eth0网卡,网卡的ip地址正是我们刚才绑定的192.168.1.200
Python
bash-4.1# ip a 1: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_lftforever 22: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_lftforever bash-4.1#
到此为止,docker绑定固定的静态ip的方法已经说明白了…. 看了文章后,会发现docker绑定ip是比较的简单.. docker的网络是不怎么好理解的,这两天我多专供下docker分配ip的整个流程 (docker iptables)
以上所述是小编给大家介绍的Docker不能绑定静态的外网固定ip的问题及解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]