配置公网IP VPS部署Docker后的网络配置

2025.7.9 杂七杂八 992
33BLOG智能摘要
VPS部署Docker后需特殊网络配置才能实现公网访问。作者因未配置安全组、系统防火墙和Docker网络模式,导致服务不可访问。最终解决方案是使用默认bridge模式,开放云平台安全组的80端口,并设置iptables转发规则将流量导向容器IP及VPS内网IP。调试时可借助netstat、telnet和docker network inspect工具辅助排查问题。此外,若使用宝塔面板,也需检查其防火墙设置。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

我的踩坑实录:给带公网IP的VPS配置Docker网络那些事儿

配置公网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 云平台安全组

# 以阿里云为例,需要放行入方向端口
# 规则示例:
协议类型: TCP
端口范围: 80/80
授权对象: 0.0.0.0/0

2.2 系统防火墙

Ubuntu默认的ufw会阻止Docker端口,建议:

sudo ufw allow 80/tcp
# 或者更暴力的方式(生产环境慎用)
sudo ufw disable

2.3 Docker网络模式

这是我踩的最大的坑!默认的bridge模式会导致:

  • 容器绑定到172.17.0.0/16网段
  • 端口映射实际发生在docker0网卡

解决方案是用host网络模式:

docker run --network=host -d nginx

注意:这样容器会直接使用主机网络栈,安全性要考虑清楚

3. 我的终极解决方案

经过多次尝试,最终采用的方案是:

  1. 保持默认bridge网络
  2. 在安全组开放所需端口
  3. 配置iptables转发规则:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
sudo iptables -t nat -A POSTROUTING -p tcp -d 172.17.0.2 --dport 80 -j SNAT --to-source [VPS内网IP]

记得把172.17.0.2换成你的容器实际IP,可以用docker inspect查看。

4. 验证技巧和小贴士

分享几个调试时超有用的命令:

# 查看端口监听情况
netstat -tulnp | grep 80

# 测试外部连通性(用另一台服务器)
telnet 你的公网IP 80

# 查看Docker网络详情
docker network inspect bridge

最后提醒:如果用了宝塔面板,记得去软件商店里把防火墙也检查一遍!我就被这个隐藏关卡坑过一次…

希望这篇记录能帮到你。如果遇到其他网络问题,欢迎在评论区交流~

评论

  • 太实用了!刚好遇到同样的问题,按照步骤操作终于解决了 👍

  • 我也是被安全组卡了半天,楼主总结得很到位

  • 建议新手用host模式确实省事,不过安全性要注意,楼主建议很中肯

  • docker网络这块确实坑多,感谢分享经验 🤔