Docker多容器应用NGINX报111连接拒绝错误求助
问题分析与解决方案
核心问题
NGINX返回502 Bad Gateway的原因是容器内的localhost指向容器自身,而非后端服务容器。你的ki-ui容器中,proxy_pass http://localhost:8000尝试连接容器自身的8000端口,但该端口并未运行后端服务,导致连接被拒绝。
具体修复步骤
1. 修改NGINX配置中的代理地址
编辑nginx.conf,将location /ai块中的proxy_pass目标改为后端服务的Docker Compose服务名:
location /ai { proxy_pass http://ki-backend:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
在Docker Compose的同一自定义网络(comms)中,服务名ki-backend会被自动解析为对应容器的IP地址,无需依赖端口映射。
2. 修正后端容器的expose配置
你的docker-compose.yml中,后端容器的expose字段错误地写为8080,但容器内部服务运行在8000端口。修改为:
ki-backend: platform: linux/amd64 image: ki-backend:latest pull_policy: if_not_present container_name: ki-backend ports: - "8080:8000" expose: - 8000 # 改为容器内部实际运行的端口 networks: - comms
expose的作用是声明容器对外暴露的端口(仅在Docker网络内可见),与宿主机端口映射(ports)无关。
3. 重启服务使配置生效
执行以下命令重启所有容器:
docker-compose down && docker-compose up -d
额外验证点
- 确认后端服务确实在容器内部的
8000端口监听:可以进入后端容器执行curl localhost:8000/ai/chatGPT测试服务是否正常响应。 - SSL证书无需调整:前端能正常加载
443端口内容,说明证书配置有效,与502错误无关。
内容的提问来源于stack exchange,提问作者Jan Etschel
相关产品推荐
相关产品推荐

