DOCKER手动配置容器的网络

默认情况下,启动容器不加--net参数启动容器是可以通过docker0获取ip地址并连接网络的

手动配置更加灵活,并能了解原理和细节

1、启动容器,指定--net=none

[root@v77 run]# docker run -it --net=none -d tomcat:v3     
24ca74a9f2a81478f1989035374cc059effe18b0644a3530de56d8b4abd65a12

此时容器无法连接网络

[root@v77 ~]# docker exec -it 24ca74a9f2a8 bash

root@24ca74a9f2a8:/usr/local/tomcat# ping www.sina.com.cn
ping: www.sina.com.cn: Temporary failure in name resolution
root@24ca74a9f2a8:/usr/local/tomcat# 
root@24ca74a9f2a8:/usr/local/tomcat# ping www.baidu.com
ping: www.baidu.com: Temporary failure in name resolution

2、查询容器的进程ID

[root@v77 run]# docker inspect -f '{{.State.Pid}}' 24ca74a9f2a8
6663

3、为容器的进程创造命名空间

[root@v77 run]# mkdir -p /var/run/netns

[root@v77 run]# ln -s /proc/6663/ns/net /var/run/netns/6663

4、查询docker0的IP

[root@v77 ~]# ip addr | grep docker0
    docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    inet 172.17.0.1/16 scope global docker0

5、创建veth peer的接口A和B,将接口A桥接到docker0,将接口B放到容器的第三步定义的命名空间,并命名为eth0,指定IP地址,并指定网络缺省的下一跳地址为物理机的docker0的IP

[root@v77 run]# ip link add A type veth peer name B          #创建veth peer的接口A和B

[root@v77 run]# brctl addif docker0 A                                  #将接口A桥接到docker0

[root@v77 run]# ip link set A up                                           #UP该端口

[root@v77 run]# ip link set B netns 6663                            #将接口B放到容器的第三步定义的命名空间

[root@v77 run]# ip netns exec 6663 ip link set dev B name eth0      #命名为eth0

[root@v77 run]# ip netns exec 6663 ip link set eth0 up        #UP该端口

[root@v77 run]# ip netns exec 6663 ip addr add 172.17.0.99/16 dev eth0    #指定容器的IP地址

[root@v77 run]# ip netns exec 6663 ip route add default via 172.17.0.1       #指定网络缺省下一跳地址为物理机docker0的IP 

6、测试网络,eth0为上一步指定的IP,下一跳物理机docker0也将数据包转发出去,可以ping通外网

root@24ca74a9f2a8:/usr/local/tomcat# ip addr | grep eth0
    eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 172.17.0.99/16 scope global eth0

root@24ca74a9f2a8:/usr/local/tomcat# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=127 time=16.8 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=127 time=12.8 ms

猜你喜欢

转载自blog.csdn.net/lsysafe/article/details/84824680
今日推荐