Docker网络地址冲突问题及解决

Docker的网络问题

Docker虽好,网络难搞。一开docker,生产vpn用不了。

Docker所开启的内网地址,为什么要开这些网络?

  • docker会开启内网地址

$ ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether e0:d5:5e:55:4b:e0 brd ff:ff:ff:ff:ff:ff

    inet 10.216.24.192/21 brd 10.216.31.255 scope global dynamic noprefixroute enp3s0

       valid_lft 690826sec preferred_lft 690826sec

    inet6 fe80::f5ad:7bea:e0fb:f6a/64 scope link noprefixroute 

       valid_lft forever preferred_lft forever



# vincent @ vincent-B250M-DS3H in ~ [10:02:24] 

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES



# vincent @ vincent-B250M-DS3H in ~ [10:02:37] 

$ ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether e0:d5:5e:55:4b:e0 brd ff:ff:ff:ff:ff:ff

    inet 10.216.24.192/21 brd 10.216.31.255 scope global dynamic noprefixroute enp3s0

       valid_lft 690809sec preferred_lft 690809sec

    inet6 fe80::f5ad:7bea:e0fb:f6a/64 scope link noprefixroute 

       valid_lft forever preferred_lft forever

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 

    link/ether 02:42:2f:e4:0b:72 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

       valid_lft forever preferred_lft forever

4: br-52e5b703a337: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 

    link/ether 02:42:ed:e9:7c:a8 brd ff:ff:ff:ff:ff:ff

    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-52e5b703a337

       valid_lft forever preferred_lft forever

5: br-e22ed54865c9: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 

    link/ether 02:42:37:ec:2f:c0 brd ff:ff:ff:ff:ff:ff

    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-e22ed54865c9

       valid_lft forever preferred_lft forever

如上集中在3个网段,都是B类地址,因为很多家中机,小企业机,都是用C类地址的,但是对网易来说不合适

网易是大企业,我的工作机ip10.216.24.192是A类的,可以容纳1千万台主机


网络地址规划

  • 办公网ip,A类

  • 办公vpn(运维用,连接测试和生产服务器),是172的,B类

  • docker网络,统统改为C类


桥接模式的网络流向

外部访问docker,比如16302端口打开,要访问到docker内部的取证服务

1.宿主机上谁打开了16302端口?


sudo netstat -anp | grep 16302  --显示是docker-proxy打开的

也就是访问docker内服务的请求,最先是docker daemon本身先接收到的

2.docker daemon将这个请求转到docker0网桥

3.docker0网桥将请求转到172网络

通过ip route设置,自然会转到veth(而这个veth就是docker中eth0的马甲)

在这里插入图片描述

如上2个问题就是出在第三步问题,这段和vpn的网段重复了,结果docker0发出的报文,到被导向了vpn,造成访问不了docker

  • 删除其他两个bridge,只保留docker0;而且docker0要变成是192网段的

  • 配置docker0,变成192.168网段 ,C类地址

看下docker官方的文档:


https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/

我在/etc/docker目录下新建了daemon.json文件,之所以用如下,是否为了和可能的冲突避免开


{

 "bip": "192.168.200.1/24"

} 

然后重启


sudo systemctl daemon-reload

sudo systemctl restart docker.service

然后就好了

宿主机看ifconfig,docker0已经ip变了

进入容器内看,ifconfig,ip也已经变了

并且本地vnc和SpringBoot都可以用了!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章