Docker Nginx反向代理内置Nginx的Gitlab容器遇连接拒绝
问题解决思路
核心原因
错误日志显示Nginx代理尝试连接172.18.0.2:8000被拒绝,问题出在容器间通信时误用了主机映射端口,而非Gitlab容器内部的服务端口。
你的Gitlab容器端口映射为8000:80,这个配置的含义是:
- 主机的8000端口转发到容器内部的80端口(Gitlab内置Nginx实际监听的端口)
- 但在Docker自定义网络中,容器之间直接通信必须使用容器内部的端口(80),主机映射的8000端口仅用于外部主机访问容器
修改后的Nginx配置
upstream gitlab { server git.dev.local:80; # 将8000改为Gitlab容器内部的80端口 } upstream jfrog { server jfrog.dev.local:8082; } server { server_name git.dev.local; location / { proxy_pass http://gitlab; # 补充Gitlab反向代理必需的请求头(可选但推荐) 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-Proto $scheme; } } server { server_name jfrog.dev.local; location / { proxy_pass http://jfrog; } }
验证步骤
- 重启Nginx代理容器,加载新配置
- 访问
git.dev.local,确认连接恢复正常
额外说明
- Docker自定义网络内的容器可通过设置的别名直接通信,无需依赖主机端口映射
- Gitlab的
external_url设置为git.dev.local是正确的,能确保平台内部生成的链接符合访问规则
内容的提问来源于stack exchange,提问作者Omar Al-Howeiti
相关产品推荐
相关产品推荐

