【问题标题】:What's the source of Error: getaddrinfo EAI_AGAIN?错误的来源是什么:getaddrinfo EAI_AGAIN?
【发布时间】:2025-11-24 15:25:01
【问题描述】:

我的服务器今天抛出了这个,这是我以前从未见过的 Node.js 错误:

Error: getaddrinfo EAI_AGAIN my-store.myshopify.com:443
    at Object.exports._errnoException (util.js:870:11)
    at errnoException (dns.js:32:15)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:26)

我想知道这是否与影响 Shopify 和当今许多其他服务的 DynDns DDOS 攻击有关。 Here's an article about that.

我的主要问题是dns.js 做什么?它属于节点的哪一部分?如何使用不同的域重新创建此错误?

【问题讨论】:

    标签: javascript node.js error-handling dns shopify


    【解决方案1】:

    EAI_AGAIN 是 DNS 查找超时错误,表示它是网络连接错误或代理相关错误。

    我的主要问题是 dns.js 是做什么的?

    • dns.js 用于节点获取域的 ip 地址(简而言之)。

    更多信息: http://www.codingdefined.com/2015/06/nodejs-error-errno-eaiagain.html

    【讨论】:

      【解决方案2】:

      @xerq 指向正确,这里有更多参考 http://www.codingdefined.com/2015/06/nodejs-error-errno-eaiagain.html

      我遇到了同样的错误,我通过更新 Windows 操作系统中此位置下的“主机”文件解决了它

      C:\Windows\System32\drivers\etc

      希望对你有帮助!!

      【讨论】:

        【解决方案3】:

        这是与主机文件设置相关的问题。 将以下行添加到您的 hots 文件中 在 Ubuntu 中:/etc/hosts

        127.0.0.1   localhost
        

        在 windows 中:c:\windows\System32\drivers\etc\hosts

        127.0.0.1   localhost
        

        【讨论】:

          【解决方案4】:

          OP 的错误指定了一个主机 (my-store.myshopify.com)。 我遇到的错误除了没有指定域外,其他方面都是一样的。

          我的解决方案可能会对标题为“错误:getaddrinfo EAI_AGAIN”的其他人有所帮助

          我在尝试从与最初开发代码的不同 VM 提供 NodeJs 和 VueJs 应用程序时遇到错误。

          文件vue.config.js读取:

           module.exports = {
             devServer: {
               host: 'tstvm01',
               port: 3030,
             },
           };
          

          在原始机器上提供服务时,启动输出为:

          App running at:
          - Local:   http://tstvm01:3030/ 
          - Network: http://tstvm01:3030/
          

          在 VM tstvm07 上使用相同的设置让我遇到了与 OP 描述的错误非常相似的错误:

           INFO  Starting development server...
           10% building modules 1/1 modules 0 activeevents.js:183                              
                throw er; // Unhandled 'error' event
                ^
          
          Error: getaddrinfo EAI_AGAIN
              at Object._errnoException (util.js:1022:11)
              at errnoException (dns.js:55:15)
              at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
          

          如果还不是很明显,请将vue.config.js 更改为阅读...

           module.exports = {
             devServer: {
               host: 'tstvm07',
               port: 3030,
             },
           };
          

          ...解决了问题。

          【讨论】:

            【解决方案5】:

            如果您在使用 Firebase Cloud Functions 时遇到此错误,这是由于免费层的限制(仅允许 Google 服务的出站网络)。

            升级到 FlameBlaze 计划以使其工作。

            【讨论】:

            • 您刚刚为我节省了 小时 的研究时间。荣誉
            • 没错,刚刚升级为按使用付费的 blaze 计划,零成本(此结转免费层级数据来自 spark)
            • 你能@NullPointer,详细说明解决方案,我仍然收到错误`错误:无法处理请求`
            • 我有同样的问题并已升级到 Blaze 帐户,但问题仍然相同。我正在尝试使用邮递员。
            • 由于某种原因,我在尝试通过 process.env.SOMETHING 访问我的 SMTP 凭据时遇到了这种情况,即使启用了 Blaze
            【解决方案6】:

            在对在 docker 容器内运行的 GraphQL API 应用程序进行了一次微不足道的更新后,我开始收到此错误(尽管堆栈跟踪不同)。无论出于何种原因,容器在解析 API 使用的后端服务时遇到了困难。

            在四处寻找我正在构建的 docker 基础映像(顺便说一下,节点:13-alpine)中是否发生了一些变化之后,我决定尝试最古老的计算机科学重启技巧......我停下来并启动docker容器,一切恢复正常。

            显然,这不是解决根本问题的有意义的解决方案 - 我只是发布此内容,因为它确实为我解决了问题,而无需深入研究兔子洞。

            【讨论】:

              【解决方案7】:

              我在使用 AWS 和无服务器时遇到了同样的问题。我尝试使用eu-central-1 区域,但它不起作用,因此我不得不将其更改为us-east-2 作为示例。

              【讨论】:

                【解决方案8】:

                如果您从 docker 容器中收到此错误,例如在 alpine 容器内运行 npm install 时,原因可能是容器启动后网络发生了变化。

                要解决这个问题,只需停止并重新启动容器

                docker-compose down
                docker-compose up
                

                来源:https://github.com/moby/moby/issues/32106#issuecomment-578725551

                【讨论】:

                • 我有一个可疑的问题,即在主机上重置了网络,然后容器似乎出现了 DNS 错误。有什么方法可以配置容器在这种情况下不停止它们的情况下生存?
                【解决方案9】:

                正如xerq's excellent answer 解释的那样,这是一个 DNS 超时问题。

                我想为那些使用 Windows 子系统 for Linux 的人提供另一个可能的答案 - 在某些情况下,在 Windows 从睡眠状态恢复后,客户端操作系统中的某些内容似乎出现了问题。重新启动主机操作系统将解决这些问题(也可能重新启动 WSL 服务也会这样做)。

                【讨论】:

                • 对我来说就是这样。重启解决了这个问题!
                【解决方案10】:

                启用 Blaze 后仍然无法使用?

                很可能您需要从正确的路径设置.envrequire('dotenv').config({ path: __dirname + './../.env' });won't work(或任何其他路径)。只需将.env 文件放在functions 目录中,您就可以从该目录部署到Firebase

                【讨论】:

                  【解决方案11】:

                  在我的情况下,问题是 docker 网络 ip 分配范围,有关详细信息,请参阅 this post

                  【讨论】:

                    【解决方案12】:

                    我在 docker-compose 上遇到了这个问题。原来我忘记将我的自定义隔离命名网络添加到我的服务中,但找不到。

                    TLDR;确保在您的撰写文件中,您在需要相互通信的两个服务上定义了您的 custom-networks

                    我的错误如下所示:Error: getaddrinfo EAI_AGAIN minio-service。使用minio-service 主机名调用minio-service 时,错误来自我的服务器后端。这告诉我minio-service 的运行服务无法通过我的server 运行服务访问。我能够解决这个问题的方法是我在我的 docker-compose 中更改了 minio-service:

                    • docker-compose.yml
                    version: "3.8"
                    
                    # ...
                    
                    services:
                      server:
                        # ...
                        networks:
                          my-network:
                        # ...
                      minio-service:
                        # ... (missing networks: section)
                    
                    # ...
                    
                    networks:
                      my-network:
                    

                    要包含我的自定义隔离命名网络,如下所示:

                    • docker-compose.yml
                    version: "3.8"
                    
                    # ...
                    
                    services:
                      server:
                        # ...
                        networks:
                          my-network:
                        # ...
                      minio-service:
                        # ...   
                        networks:
                          my-network:
                        # ...
                    
                    # ...
                    
                    networks:
                      my-network:
                    

                    More details on docker-compose networking can be found here.

                    【讨论】:

                      【解决方案13】:

                      尝试从 WSL 安装 NPM 包时出现同样的错误。

                      npm ERR! request to https://registry.npmjs.org/serverless-python-requirements failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
                      

                      resolv.conf编辑中指定的现有DNS服务器替换为

                      sudo nano /etc/resolv.conf
                      

                      以及指定public DNS servers from Google

                      nameserver 8.8.8.8
                      nameserver 2001:4860:4860::8888
                      nameserver 2001:4860:4860::8844
                      

                      【讨论】:

                        最近更新 更多