Python学习【12】:虚拟机IP老是变?一次搞定静态IP,顺便理清Nginx在物理机与Docker下的配置差异
你有没有遇到过这样的场景:昨天还好好的项目,今天打开浏览器却是一片空白或502错误。检查了半天,代码没动、配置没改、服务也在运行——最后发现,只是虚拟机的IP地址变了。在VirtualBox中运行Ubuntu虚拟机,网络采用桥接模式,IP由路由器DHCP动态分配。昨天是192.168.1.6,今天重启后变成了192.168.1.5。看起来只是数字变了一位,但整个GDP动态条形图项目就瘫痪了——因为Nginx配置里的proxy_pass还死死指向旧地址。本文就围绕这两个问题,记录完整的排查与解决过程,希望能帮到有类似困扰的开发者。浏览器访问http://192.168.1.6:8080正常,但虚拟机重启后IP变成192.168.1.5,访问新地址却出现502 Bad Gateway。Nginx配置中的proxy_pass还在指向旧的IP地址:浏览器访问8080端口时,Nginx尝试将请求转发给192.168.1.6:8000,但该地址已不存在,于是返回502。如何在Nginx配置变更后,确保Docker容器内的配置同步更新?Ubuntu使用Netplan管理网络,配置文件在/etc/netplan/目录下:2.4 Nginx配置同步(物理机 vs Docker)IP固定后,需要将Nginx配置中的旧IP全部替换为新IP。如果Nginx直接安装在Ubuntu上,修改配置非常简单:这是本次踩坑最多的地方。Docker容器是一个隔离环境,配置文件在容器内部,物理机修改不会自动同步(除非用挂载卷)。每次修改都要docker cp确实麻烦。更好的做法是在启动容器时挂载配置文件目录,宿主机修改即同步到容器。挂载后,宿主机文件与容器文件是“同一个”,修改宿主机文件,容器内立即生效,只需重载即可:本文从一个“IP变了导致服务502”的实际问题出发,梳理了两个核心问题的解决方案。以下是重点:- Docker容器内外的配置是隔离的,修改后必须同步
- 重载配置前先测试语法(nginx -t),避免因语法错误导致服务中断
- 后端服务监听0.0.0.0,确保Docker容器能正常访问
让我们保持学习的热情,2026年一马当先、马到成功!