GCP虚拟机上Nginx容器无法将请求路由到Web应用故障排查
请求无法路由到Web应用的可能原因
- 容器环回地址隔离问题:每个Docker容器都有独立的网络命名空间,你Nginx配置里
upstream app指向的127.0.0.1:8020是Nginx容器自身的环回地址,既不是宿主机的地址也不是app容器的地址,自然无法定位到运行在app容器内的Web服务。 - 跨容器网络未打通:三个容器独立启动时默认加入Docker的默认
bridge网络,该网络不支持通过容器名做DNS解析,且默认禁止未做端口暴露的跨容器通信。你的mysql容器未做宿主机端口映射,Nginx也无法通过宿主机地址访问mysql服务。 - Nginx server块未匹配请求:你的配置中
server_name设为appServer1,如果请求的Host头为虚拟机IP、其他域名或为空,Nginx会优先匹配官方镜像自带的默认server块(对应/etc/nginx/conf.d/default.conf配置),直接返回默认欢迎页,不会触发你写的代理规则。 - Nginx自定义配置未正确加载:
- 若你修改
nginx.conf后没有重新构建Nginx镜像,运行的容器仍会使用旧的配置文件 - 官方Nginx主配置默认仅加载
/etc/nginx/conf.d/目录下后缀为.conf的文件,若你复制的配置文件名不符合要求,规则也不会生效
- 若你修改
- 代理端口配置错误:如果你想通过宿主机端口映射访问app服务,宿主机侧暴露的端口是
8001,就算你把upstream地址改为宿主机内网IP,也需要填写宿主机IP:8001,而非8020——8020是app容器内部的端口,仅在同一容器网络内可直接访问。
内容的提问来源于stack exchange,提问作者TOI 700 e
相关产品推荐
相关产品推荐

