我的踩坑实录:给带公网IP的VPS配置Docker网络那些事儿
大家好,我是33blog的运维小哥。上周在给新买的VPS部署Docker时,被网络配置折腾得够呛。今天就把这些实战经验(和血泪教训)整理出来,希望能帮到同样遇到问题的朋友。
1. 为什么需要特殊配置?
刚开始我以为,在VPS上装Docker和本地开发机没什么区别。直到部署完第一个容器,发现公网根本访问不了,才意识到问题:
- 云厂商的VPS通常有安全组/防火墙
- Docker默认创建的网桥是私有网络
- NAT转发规则需要手动配置
特别是当我用docker run -p 80:80 nginx
启动服务后,本地curl 127.0.0.1
能通,但用公网IP访问就是超时,这个现象让我debug了整整两小时…
2. 必须检查的三层配置
经过反复测试,总结出这三个关键检查点:
2.1 云平台安全组
1
2.2 系统防火墙
Ubuntu默认的ufw会阻止Docker端口,建议:
1
2.3 Docker网络模式
这是我踩的最大的坑!默认的bridge模式会导致:
- 容器绑定到172.17.0.0/16网段
- 端口映射实际发生在docker0网卡
解决方案是用host
网络模式:
1
注意:这样容器会直接使用主机网络栈,安全性要考虑清楚
3. 我的终极解决方案
经过多次尝试,最终采用的方案是:
- 保持默认bridge网络
- 在安全组开放所需端口
- 配置iptables转发规则:
1
记得把172.17.0.2换成你的容器实际IP,可以用docker inspect
查看。
4. 验证技巧和小贴士
分享几个调试时超有用的命令:
1
最后提醒:如果用了宝塔面板,记得去软件商店里把防火墙也检查一遍!我就被这个隐藏关卡坑过一次…
希望这篇记录能帮到你。如果遇到其他网络问题,欢迎在评论区交流~
太实用了!刚好遇到同样的问题,按照步骤操作终于解决了 👍
我也是被安全组卡了半天,楼主总结得很到位
建议新手用host模式确实省事,不过安全性要注意,楼主建议很中肯
docker网络这块确实坑多,感谢分享经验 🤔
宝塔面板的防火墙那里我也踩过坑,还以为自己配置问题,原来大家都遇到过
有没有考虑过用docker-compose来管理这些配置?感觉会更方便点