版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxid2798226/article/details/85016440
Docker的网络问题
Docker虽好,网络难搞。
-
最早用网易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都可以用了!!