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都可以用了!!

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