docker 容器互通端口场景测试
172.26.11.221 > 容器1
172.26.11.222
场景一:通过在172.26.11.222 执行命令 nc -l 1234,然后在容器1中 nc 172.26.11.222 1234
然后在容器1执行netstat -nlap
显示:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.17.0.2:47014 172.26.11.222:1234 ESTABLISHED 525/nc
然后在容器1宿主机上172.26.11.221执行命令:netstat -nlap|grep 47014 为空
然后在172.26.11.222 执行命令 netstat -nlap|grep 47014
tcp 0 0 172.26.11.222:1234 172.26.11.221:47014 ESTABLISHED 6008/nc
47014端口对应的是172.26.11.221端口,但是在172.26.11.221查看又没有47014端口
总结:
当容器1和172.26.11.222建立tcp通讯时,容器1内部启动端口47014,与宿主机172.26.11.221,外有一个端口映射,通过这个映射关系和外面建立tcp连接通讯
场景二:容器1 启动dubbo服务,注册到zk中,在zk控制台显示的容器的ip,端口号(根据场景一,此时和zk建立连接的是容器1宿主机172.26.11.221)
dubbo这种场景,docker容器网络互通没问题
通过echo cons | nc 127.0.0.1 2181 查看客户端连接信息
/172.26.11.224:46552[1](queued=0,recved=2,sent=2,sid=0x158eb8f374d0004,lop=PING,est=1481426888544,to=30000,lcxid=0x0,lzxid=0xa,lresp=1481426898571,llat=0,minlat=0,avglat=25,maxlat=50)
/127.0.0.1:39315[0](queued=0,recved=1,sent=0)
/172.26.11.224:60971[1](queued=0,recved=553,sent=553,sid=0x158eb8f374d0001,lop=PING,est=1481421373591,to=30000,lcxid=0x0,lzxid=0xa,lresp=1481426897377,llat=0,minlat=0,avglat=0,maxlat=17)
即使是容器内部连接过来的,显示的还是容器宿主机的ip
场景三:外部访问容器http服务,通过docker 原生容器通讯只能做到容器间的通讯,容器访问宿主机,做不到宿主机访问容器
换一种docker网络通讯模式flannel