You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动