Docker Compose部署Nginx反向代理容器出现502 Bad Gateway错误求助
Docker Compose部署Nginx反向代理容器出现502 Bad Gateway错误求助
兄弟,我一眼就瞅到问题的关键啦!这是Docker容器间通信的典型误区,咱们一步步捋清楚解决:
问题根源:搞混了「宿主机映射端口」和「容器内部端口」
你的WordPress服务是把容器内部的80端口映射到了宿主机的8080端口(8080:80),但容器之间的通信是直接在Docker专属网络里进行的,根本不需要走宿主机的映射端口!
之前你试的几种方式为啥都失效:
- 用
localhost:8080/0.0.0.0:8080:在Nginx容器里,localhost指的是Nginx容器自身,不是你的宿主机,自然找不到WordPress服务 - 用容器IP:容器重启后IP大概率会变动,不仅麻烦还不稳定,而且你还搞错了端口(应该连容器内部的80,不是宿主机的8080)
正确解决方案
1. 修改Nginx配置文件nginx.conf
把proxy_pass改成用Docker Compose的服务名访问WordPress容器的内部端口:
worker_processes 1; events { worker_connections 1024; } http { server { listen 80; location / { # 核心修改:服务名+容器内部端口 proxy_pass http://wordpress:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } } }
Docker Compose会自动在默认网络里把服务名(这里是wordpress)解析成对应容器的IP,完全不用手动记IP~
2. 重新构建并启动容器
因为你是把nginx.confCOPY进镜像的,修改配置后需要重新构建Nginx镜像:
docker-compose down docker-compose build reverse_proxy docker-compose up -d
3. 验证网络连通性(可选)
如果还是有问题,可以进入Nginx容器ping一下WordPress服务,确认网络没问题:
docker exec -it reverse_proxy ping wordpress
能ping通就说明网络正常,剩下的就是配置生效的事啦
额外小提示
- 你的WordPress已经映射了
8080:80,测试反向代理的时候记得别同时用宿主机8080访问,避免干扰 - 以后容器间通信优先用服务名,这是Docker Compose最省心的特性之一,别再手动记容器IP啦
备注:内容来源于stack exchange,提问作者M1r2kt1




