Docker隐射的端口外网不能访问
大约 3 分钟
问题
比如现在有一台公网服务器,公网ip是111.111.111.111,内网ip是:10.1.1.1 。在这台服务器上面跑了两个服务:
mysql
非docker方式,暴露的端口是3306,绑定的ip是0.0.0.0
nacos
docker方式,映射到宿主机的端口有8848和9848。连接的mysql地址是:111.111.111.111:3306/nacos
现在发现的问题有:
- nacos总起不来,总提示
No DataSource set
,但在本地却能连接 111.111.111.111:3306/nacos,并能读写数据 - 后面把nacos的mysql连接地址改10.1.1.1:3306/nacos后,nacos能启动成功了,但外网访问不了nacos的控制台
这台服务器之前两个服务都能正常在公网访问,突然有一天发现不行了
查看防火墙端口设置:

8848端口也开了的,在服务器上执行telnet 127.0.0.1 8848
也是通的,但执行telnet 111.111.111.111 8848
就不通
网上各种乱搜,发现了始作俑者:ip_forward
解决过程
通过是否开启了路由转发 cat /proc/sys/net/ipv4/ip_forward
输出0表示没有开启,1表示开启了。此时输出的是0
为0,表示禁用了路由转发,也就是说禁止了本机网卡之间的通信。
禁用后,在docker容器内部也就无法访问公网
也就是解释了为什么nacos的mysql地址设置为111.111.111.111:3306/nacos的时候启动不了
设置为1
不能直接vim /proc/sys/net/ipv4/ip_forward 来修改.
正确姿势:
vim /etc/sysctl.conf
找到net.ipv4.ip_forward,将其值修改为1. 或者在文末追加这个配置
net.ipv4.ip_forward = 1
使其生效
sysctl -p
到此可以验证下在docker容器内部能否访问外网,我这里是重启了docker
至此,上面的服务都能正常访问了
溯源
之前这两个服务一直都是好的,为啥“突然”就不行了。
回忆下来估计是中途按照了BBR,并重启了一次服务器,基本可以确定和这个有关系。
系统推荐
- Spring Cloud Gateway收到的是http请求,但schema却是https
- Nacos-Spring Gateway-Spring boot无感发布
- Spring Cloud(一):服务治理技术概览【Finchley 版】
- PostgreSQL定时备份
- MongoDB高可用
- Censys搜索引擎学习
- MAC CMS
- 常用队列
- index方法压力测试记录
- gperftools
- Lombok的Accessors导致EasyExcel读取失败
- Mermaid示例
- 随机毒鸡汤:不要和任何人诉苦,因为20%的人不关心,还有80%的人会高兴。