使用docker-compse安装了一套系统。

结果发现mysql等中间件无法通过主机ip访问。

尝试使用 telnet 127.0.0.1 3306可以通,telnet 主机IP 3306不通。

经过各种折腾,发现问题。

记录一个Docker安装mysql无法外部访问处理过程_IP

居然没有创建ipv4的端口映射。

查了下资料发现,现在的很多新版本系统,都是默认ipv6网络优先。

然后安装docker后,docker默认使用ipv6构建docker0网络。

记录一个Docker安装mysql无法外部访问处理过程_容器_02

所以容器端口映射,仅创建了tcp6的端口,没有tcp的端口。也就是不支持使用ipv4访问。

解决办法:

修改主机/etc/docker/daemon.json的配置,增加如下配置项:

{
  "ipv6": false,
  "fixed-cidr-v6": ""
}

然后重启docker服务:

sudo systemctl restart docker

再查看

记录一个Docker安装mysql无法外部访问处理过程_端口映射_03

然后再telnet 主机IP 3306就可以了。

该方法同样可以解决redis等其他中间件问题。重点是这个网络问题。