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

Docker环境下Nginx反向代理无法解析api.example.local主机问题

解决Docker中Nginx反向代理无法解析api.example.local的问题

这个错误api.example.local could not be resolved (3: Host not found)的核心原因是:Docker容器的网络环境和宿主机完全隔离,你在宿主机/etc/hosts里配置的域名映射,并不会自动同步到Nginx容器内部,容器依赖的内置DNS(127.0.0.11)找不到这个域名对应的IP地址。

下面是几种针对性的解决方案,按推荐程度排序:

1. 使用Docker服务名直接访问(最推荐)

从你的配置里fastcgi_pass php:9000来看,API服务应该和Nginx同属一个Docker环境。这种情况下完全不需要自定义域名,直接用Docker服务名替代即可:

修改Nginx配置中/api location的相关内容:

# 替换原来的set和proxy_pass配置
proxy_pass http://api; # 假设你的API服务在Docker Compose/容器编排中的服务名是api

Docker内置的DNS会自动把服务名解析到对应容器的IP,这种方式最稳定,完全不需要依赖hosts配置。

2. 给Nginx容器添加自定义hosts映射

如果一定要保留api.example.local这个域名,需要在启动Nginx容器时手动传递域名映射规则:

方式A:用docker run命令启动

启动容器时加上--add-host参数:

docker run -d \
  --add-host api.example.local:<宿主机局域网IP或API容器IP> \
  --add-host www.example.local:<宿主机局域网IP或Web容器IP> \
  <你的Nginx镜像名称>

注意:不要用127.0.0.1,因为容器里的127.0.0.1指向容器自身,应该用宿主机的实际局域网IP(比如192.168.1.100),或者API容器的具体IP。

方式B:Docker Compose配置(适合多服务编排)

如果用Docker Compose管理服务,在nginx服务的配置块里添加extra_hosts:

services:
  nginx:
    image: nginx:alpine
    extra_hosts:
      - "api.example.local:192.168.1.100" # 替换成实际IP
      - "www.example.local:192.168.1.100"
    # 其他容器配置(端口、挂载等)...

3. 临时修改容器内的hosts(仅用于测试,不推荐生产)

进入Nginx容器内部手动修改/etc/hosts,但这种配置会在容器重启后丢失:

# 进入容器终端
docker exec -it <你的Nginx容器ID> /bin/sh
# 添加域名映射
echo "192.168.1.100 api.example.local" >> /etc/hosts
echo "192.168.1.100 www.example.local" >> /etc/hosts

额外检查点

  • 确认API服务和Nginx容器是否在同一个Docker网络中,如果不在,需要先通过docker network connect把它们加入同一网络,否则即使配置了hosts也无法访问。
  • 如果使用自定义域名,检查Nginx的resolver设置:只要容器能解析到你添加的hosts映射,当前配置的127.0.0.11 ipv6=off是可以正常工作的;如果用Docker服务名,则不需要手动指定resolver,内置DNS会自动处理。

内容的提问来源于stack exchange,提问作者Devin Dixon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:04:42