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

求助:AWS中独立Docker容器访问同环境容器的域名解析问题

解决Docker容器跨网络的域名解析问题

嘿,我来帮你搞定这个头疼的问题!你遇到的FetchError: getaddrinfo ENOTFOUND本质是contC无法解析xxx.com到contA的IP地址,而且你不想把contC加入contA的虚拟网络,那咱们可以用以下几种方法解决,按推荐程度排序:

1. 最简便:启动contC时添加自定义host映射

Docker提供了--add-host参数(Docker Compose里用extra_hosts),可以直接在容器的/etc/hosts文件里添加域名与IP的映射,完全不需要修改网络配置。

操作步骤:

  • 先获取contA的内部IP地址:
    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' contA
    
    执行后会得到类似xxx.xx.xx.xxx的IP。
  • 启动contC时加上--add-host参数:
    docker run --add-host xxx.com:xxx.xx.xx.xxx [其他启动参数] your-contc-image
    
    这样contC内部的/etc/hosts就会自动添加一条xxx.xx.xx.xxx xxx.com的记录,发起请求时就能直接解析到contA的IP了。

如果用Docker Compose,在contC的服务配置里加上:

services:
  contC:
    # 其他配置
    extra_hosts:
      - "xxx.com:xxx.xx.xx.xxx"

2. 已启动容器临时修改(重启失效)

如果contC已经在运行,不想重启的话,可以手动进入容器修改/etc/hosts:

docker exec -it contC /bin/bash
echo "xxx.xx.xx.xxx xxx.com" >> /etc/hosts

⚠️ 注意:这种方法是临时的,容器重启后修改会丢失,所以还是推荐第一种方法。

3. 不推荐:修改resolv.conf配置DNS

你提到的修改/etc/resolv.conf其实是配置DNS服务器,而不是直接映射域名。如果要走这条路,你需要搭建一个私有DNS服务器(比如Bind9),在里面配置xxx.com指向contA的IP,然后在contC的resolv.conf里把这个私有DNS设为首选。这种方法太繁琐,只是为了解析单个域名的话完全没必要,所以不推荐。

为什么之前的--link没用?

Docker的--link参数已经被废弃了,而且只在默认的bridge网络下有限支持,如果你contA和contB用的是自定义虚拟网络,--link根本不会生效,所以这个方法早就不建议使用啦。

另外,Postman能访问是因为你的本地机器的hosts或DNS能正确解析xxx.com,而contC的网络环境和本地完全独立,所以会出现解析失败的差异。

内容的提问来源于stack exchange,提问作者Donna Ann Issac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:56:12