本文是对docker 端口绑定到ipv6 导致ipv4请求无法转发的问题的一些记录和解决过程。
问题症状
vmware虚拟机的 centos 7 里面运行了docker 的mysql服务,端口转发3306:3306,结果发现虚拟机外的系统无法访问到虚拟机的3306的数据库服务。
核心的原因
docker 对与ipv6默认是没有打开forwarding 设置的
首先官方的介绍:
在默认的配置中,流量的端口转发分为两种:内部流量转发(本机),外部流量转发(跨机器)
举个例子:
#docker run -d -p 80:80 nginx
这个操作会在iptables中增加如下策略(是的,docker所有的端口转发都是靠iptables实现的)
#iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 60 DOCKER all -- any any anywhere !loopback/8
… 查看余下内容