为Docker设置固定IP及使用Weave管理工具的方法

2023-12-05 0 506

为docker配置固定ip 首先,配置一个用于创建container interface的网桥,可以使用ovs,也可以使用Linux bridge,以Linux bridge为例:复制代码代码如下: br_name=dockerbrctl addbr $br_nameip addr add 192.168.33.2/24 dev $br_nameip addr del 192.168.33.2/24 dev em1ip link set $br_name upbrctl addif $br_name eth0 接着,可以启动容器了,注意用–net=none方式启动:复制代码代码如下: # start new containerhostname=\’docker.test.com\’cid=$(docker run -d -i -h $hostname –net=none -t centos)pid=$(docker inspect -f \'{{.State.Pid}}\’ $cid) 下面,为该容器配置网络namespace,并设置固定ip:复制代码代码如下: # set up netnsmkdir -p /var/run/netnsln -s /proc/$pid/ns/net /var/run/netns/$pid# set up bridgeip link add q$pid type veth peer name r$pidbrctl addif $br_name q$pidip link set q$pid up# set up docker interfacefixed_ip=\’192.168.33.3/24\’gateway=\’192.168.33.1\’ip link set r$pid netns $pidip netns exec $pid ip link set dev r$pid name eth0ip netns exec $pid ip link set eth0 upip netns exec $pid ip addr add $fixed_ip dev eth0ip netns exec $pid ip route add default via 192.168.33.1 这样,容器的网络就配置好了,如果容器内部开启了sshd服务,通过192.168.33.3就可以直接ssh连接到容器,非常方便。上面的步骤比较长,可以借助pipework来为容器设置固定ip(除了设置IP,还封装了配置网关、macvlan、vlan、dhcp等功能):复制代码代码如下: pipework docker0 be8365e3b2834 10.88.88.8/24那么,当容器需要删除的时候,怎么清理网络呢,其实也很简单:复制代码代码如下: # stop and delete containerdocker stop $ciddocker rm $cid# delete docker\’s net namespace (also delete veth pair)ip netns delete $pid使用weave管理docker网络 weave简单使用复制代码代码如下:sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave复制代码代码如下:sudo chmod a+x /usr/local/bin/weave启动weave路由器,这个路由器其实也是在docker中启动的:复制代码代码如下:[root@h-46mow360 ~]# weave launchUnable to find image \’zettio/weave\’ locally3b3a3db2c186fccb5203dcc269b3febbbbf126591a7ebd8117a8a5250683749f复制代码代码如下:[root@h-46mow360 ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.56847afe9799 no veth801050aweave 8000.7afc2a03325e no vethwepl2146复制代码代码如下:[root@h-46mow360 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3b3a3db2c186 zettio/weave:git-a34e214201cb "/home/weave/weaver About a minute ago Up About a minute 0.0.0.0:6783->6783/tcp, 0.0.0.0:6783->6783/udp weave在两台物理机上分别启动一个容器:复制代码代码如下:c1=$(weave run 10.0.3.3/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)c2=$(weave run 10.0.3.5/24 -t -i -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd:systemd /usr/lib/systemd/systemd)这个时候,两个容器之间是不通的,需要在两台weave的路由器之间建立连接:( if there is a firewall between $HOST1 and $HOST2, you must open port 6783 for TCP and UDP)复制代码代码如下:weave connect 10.33.0.9这样,两台容器之间通了:复制代码代码如下:# nsenter –mount –uts –ipc –net –pid –target $(docker inspect –format \”{{.State.Pid}}\” \”$c2\”)复制代码代码如下:-bash-4.2# ping -c 3 10.0.3.3PING 10.0.3.3 (10.0.3.3) 56(84) bytes of data.64 bytes from 10.0.3.3: icmp_seq=1 ttl=64 time=2.34 ms64 bytes from 10.0.3.3: icmp_seq=2 ttl=64 time=1.52 ms64 bytes from 10.0.3.3: icmp_seq=3 ttl=64 time=1.13 ms— 10.0.3.3 ping statistics —3 packets transmitted, 3 received, 0% packet loss, time 2003msrtt min/avg/max/mdev = 1.131/1.667/2.345/0.505 msweave其他特性 •应用隔离:不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通;不同物理机之间的容器默认也是隔离的•物理机之间容器互通:weave connect $OTHER_HOST•动态添加网络:对于不是通过weave启动的容器,可以通过weave attach 10.0.1.1/24 $id来添加网络(detach删除网络)•安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信•与宿主机网络通信:weave expose 10.0.1.102/24,这个IP会配在weave网桥上•查看weave路由状态:weave ps•通过NAT实现外网访问docker容器

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 其它系统 为Docker设置固定IP及使用Weave管理工具的方法 https://www.u-9.cn/system/qtos/89740.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务