CentOS 8 Docker 容器无法访问宿主机服务解决
编辑现象
Docker
容器启动时会去连接 MariaDB
(常见的SpringBoot项目,也就是我自己打包的 Docker
镜像,见前文),但是启动失败,提示:
java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
原因
默认情况下,我们 Docker
容器运行时使用的是 Bridge
模式, Docker
启动时会创建名为 docker0
的虚拟网桥,我们 Docker
容器所访问网络均从这个出口出去,所以我们在配置文件中访问宿主机的服务,不再是访问 127.0.0.1
,而是 docker0
网桥的ip地址,一般来说都是 172.17.0.1
。 但是, Centos
使用的 firewalld
的防火墙, docker
容器启动时会配置 iptables
用于自动放行来自容器内部的请求。但是偏偏 firewalld
没有,所以就是这么个原因导致 Docker
容器无法访问宿主机的服务。
解决
知道了原因之后,解决方法自然就出来了。
关闭防火墙
直接简单粗暴的执行:
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 关闭防火墙的自动启动
放行端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent # 放行端口
firewall-cmd --reload # 重新加载防火墙配置
参考链接
- 0
- 0
-
分享