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

Docker中Nginx反向代理容器如何访问宿主机端口

Docker环境下Nginx容器访问宿主机本地服务配置方案

推荐方案:使用Docker内置宿主机解析(无侵入,不影响现有容器通信)

  • Docker 20.04 及以上版本默认内置专用域名host.docker.internal,该域名自动解析到宿主机地址,不会破坏现有同网络容器通过服务名互访的能力,你现有的supersite:80这类访问规则完全不需要改动。
  • 直接在Nginx的转发配置中,将指向宿主机Golang服务的地址写为http://host.docker.internal:10000即可。
  • 如果你使用的是Linux环境下的旧版本Docker,只需要在docker-compose.yml的proxy服务段新增一行extra_hosts配置,不需要调整其他网络、端口或服务配置:
services:
  proxy:
    image: nginx:1.19.10
    restart: on-failure
    volumes:
      - ./proxy/nginx.conf:/etc/nginx/nginx.conf
      - ./proxy/sites/:/etc/nginx/sites/
      - /etc/letsencrypt/:/etc/letsencrypt:ro
    expose:
      - 80
      - 443
    ports:
      - "80:80"
      - "443:443"
    container_name: "kj_proxy"
    # 新增以下配置即可
    extra_hosts:
      - "host.docker.internal:host-gateway"

  supersite:
    # 原有配置保持不变
  • 配置修改完成后,执行docker compose up -d proxy重启代理容器即可生效。

备选方案:使用Docker网桥网关地址(适配极老版本Docker)

如果你的Docker版本过低不支持host-gateway参数,可以直接使用Docker网桥的默认网关IP访问宿主机:

  • 执行命令查询proxy容器所在网络的网关地址:
    docker inspect kj_proxy | grep Gateway
  • 绝大多数默认安装的Docker环境,网桥网关地址为172.17.0.1,直接在Nginx配置中转发到http://172.17.0.1:10000即可。

配置验证与注意事项

  • 宿主机上运行的Golang服务不能仅监听127.0.0.1,需要监听0.0.0.0或者对应Docker网桥的网段地址,否则容器发起的访问会被宿主机防火墙或服务监听规则拦截。
  • 容器重启后可以进入容器执行curl http://host.docker.internal:10000验证连通性,确认返回正常后再重载Nginx配置即可。
  • 上述所有配置都不会修改现有自定义Docker网络的解析规则,原有通过服务名访问同网络其他容器的逻辑完全不受影响。

内容的提问来源于stack exchange,提问作者Kristi Jorgji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:09:17