docker(18):用PIPEWORK为docker容器配置独立IP
docker(18):用PIPEWORK为docker容器配置独立IP
参考文档:http://blog.csdn.net/design321/article/details/48264825
官方网站:https://github.com/jpetazzo/pipework
宿主环境:centos7.6
1 安装pipework
git clone https://github.com/jpetazzo/pipework.git cd pipework/ cp pipework /usr/local/bin/ chmod +x /usr/local/bin/pipework
2 配置网桥连接
2.1 安装工具
yum install bridge-utils.x86_64 -y
2.2 修改网卡配置,实现桥接
给宿主机创建网桥
[root@docker-136 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICE=ens33 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static BROADCAST=192.168.0.255 #(前三位要和主机的ip地址一致,后一位为255) DNS1=114.114.114.114 IPADDR=192.168.0.136 #(虚拟机的IP地址,前三位与主机的一致) NETMASK=255.255.255.0 GATEWAY=192.168.0.1 #(主机的默认网关地址) DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=yes BRIDGE=br0 #增加这个
设置物理网卡桥接到网桥
[root@docker-136 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 TYPE=Bridge BOOTPROTO=static NAME=br0 DEVICE=br0 ONBOOT=yes IPADDR=192.168.0.136 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=114.114.114.114
重启网络
systemctl restart network
3 运行容器
[root@docker-136 ~]# pipework br0 $(docker run -d -it -p 80:80 --name http-199 httpd:2.2) 192.168.0.199/24@192.168.0.1 WARNING: IPv4 forwarding is disabled. Networking will not work. [root@docker-136 ~]# ping 192.168.0.199 PING 192.168.0.199 (192.168.0.199) 56(84) bytes of data. 64 bytes from 192.168.0.199: icmp_seq=1 ttl=64 time=0.557 ms 64 bytes from 192.168.0.199: icmp_seq=2 ttl=64 time=0.099 ms ^C --- 192.168.0.199 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.099/0.328/0.557/0.229 ms [root@docker-136 ~]# curl 192.168.0.199 <html><body><h1>It works!</h1></body></html>[root@docker-136 ~]# [root@docker-136 ~]#
4 重启容器需要重新指定IP
[root@docker-136 ~]# docker stop 30a129173f2d 30a129173f2d [root@docker-136 ~]# docker start 30a129173f2d 30a129173f2d [root@docker-136 ~]# curl 192.168.0.199 ^C [root@docker-136 ~]# ping 192.168.0.199 PING 192.168.0.199 (192.168.0.199) 56(84) bytes of data. ^C --- 192.168.0.199 ping statistics --- 5 packets transmitted, 0 received, 100% packet loss, time 4002ms [root@docker-136 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30a129173f2d httpd:2.2 "httpd-foreground" 6 minutes ago Up About a minute 0.0.0.0:80->80/tcp http-199 6ee8323663bd 192.168.0.136:5000/centos-7-ssh-nginx:v1 "/bin/sh" 54 minutes ago Up 52 minutes 80/tcp web-1 77fe3eb86e34 progrium/consul "/bin/start -server …" 2 hours ago Up About an hour 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp consul [root@docker-136 ~]# pipework br0 http-199 192.168.0.199/24@192.168.0.1 [root@docker-136 ~]# ping 192.168.0.199 PING 192.168.0.199 (192.168.0.199) 56(84) bytes of data. 64 bytes from 192.168.0.199: icmp_seq=1 ttl=64 time=0.627 ms 64 bytes from 192.168.0.199: icmp_seq=2 ttl=64 time=0.125 ms ^C --- 192.168.0.199 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.125/0.376/0.627/0.251 ms [root@docker-136 ~]# curl 192.168.0.199 <html><body><h1>It works!</h1></body></html>[root@docker-136 ~]#