You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下本地Nginx反向代理配置SSL后容器内部请求ssgtm.dev:443连接被拒绝问题求助

Docker环境下本地Nginx反向代理配置SSL后容器内部请求ssgtm.dev:443连接被拒绝问题求助

嘿,我来帮你捋清楚这个问题的根源和解决办法~

你遇到的connect ECONNREFUSED 127.0.0.1:443错误,核心原因是容器内部的127.0.0.1和宿主机的127.0.0.1不是同一个东西!

你在宿主机的hosts文件里把ssgtm.dev指向了127.0.0.1,但容器本身有独立的网络栈,它的127.0.0.1是容器自己的回环地址,而你的容器里并没有在443端口启动服务——443端口是宿主机上的Nginx容器在监听,不是容器内部的服务。所以当容器内部发起请求到ssgtm.dev:443时,它会解析到自己的127.0.0.1,自然找不到对应的服务,就出现连接拒绝了。

下面给你几个可行的解决方案:

方案1:给容器添加宿主机域名映射(最直接)

在你的docker-compose.yml里,给tagging_server_container和preview_server_container添加extra_hosts配置,让容器内部解析ssgtm.dev和preview.ssgtm.dev时指向宿主机的网关IP:

services:
  tagging_server_container:
    # 原有的配置...
    extra_hosts:
      - "ssgtm.dev:host-gateway"
      - "preview.ssgtm.dev:host-gateway"
  
  preview_server_container:
    # 原有的配置...
    extra_hosts:
      - "ssgtm.dev:host-gateway"
      - "preview.ssgtm.dev:host-gateway"

host-gateway是Docker 20.10及以上版本支持的特殊值,它会自动指向宿主机的网络网关,这样容器内部请求这些域名时,就会把请求发送到宿主机,宿主机的Nginx就能正常接收并转发了。

方案2:用Docker内部服务名直接通信(更高效)

既然所有容器都在同一个ssgtm网络里,你可以让容器直接通过Nginx容器的服务名proxy来访问,不需要走宿主机的443端口,这样还能避免SSL的额外开销。

比如修改tagging_server_container的环境变量:

environment:
  PREVIEW_SERVER_URL: http://proxy:80
  # 原有的其他配置...

同时调整Nginx的配置,让它监听内部的80端口(或者直接用现有的监听规则,因为Nginx容器已经在80端口暴露了),这样容器内部的请求直接在Docker网络内部完成,不需要绕到宿主机的外部端口。

方案3:修改容器内部的hosts文件(手动方式)

如果你的Docker版本比较旧,不支持host-gateway,可以手动指定宿主机的IP(比如你的宿主机在Docker网络里的IP通常是172.x.x.1),然后添加到extra_hosts里:

extra_hosts:
  - "ssgtm.dev:172.17.0.1"
  - "preview.ssgtm.dev:172.17.0.1"

不过这种方式不如host-gateway灵活,因为不同环境的Docker网关IP可能不一样。

你可以先试试方案1,这个改动最小,而且能保持你现有Nginx的SSL配置不变,应该能快速解决问题~

备注:内容来源于stack exchange,提问作者Sajjad Hossain Sagor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:13:11