Docker的網絡問題
Docker雖好,網絡難搞。一開docker,生產vpn用不了。
-
在網易杭研工作期間,用網易vpn時就遇到過問題 Docker的172網絡和vpn衝突問題.md 表現是
開了vpn,docker中mysql就訪問不了,除非刪除vpn的172網段
-
現在又碰到開了vpn,vnc的端口無法訪問(因爲這次過程取證需要用vnc) Docker daemon開啓tcp端口及證書配置.md
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都可以用了!!