我的服务器今天抛出了这个,这是一个我以前从未见过的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攻击有关。这里有一篇关于这个的文章。

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


当前回答

在我的例子中,连接到VPN,当在Windows终端中运行Ubuntu时发生错误,但当直接从Windows(不是从Windows终端中)打开Ubuntu时不会发生错误。

其他回答

我得到这个错误后,我最近添加了一个新的网络到我的docker-compose文件。

我最初有这些服务:

services:
  frontend:
    depends_on:
      - backend
    ports:
      - 3005:3000
  
  backend:
    ports:
      - 8005:8000

我决定添加一个新的网络,它承载着我想让我的前端服务能够访问的其他服务,所以我这样做了:

networks:
  moar:
    name: moar-network
    attachable: true

services:
  frontend:
    networks:
      - moar
    depends_on:
      - backend
    ports:
      - 3005:3000
  
  backend:
    ports:
      - 8005:8000

不幸的是,上述情况导致我的前端服务在默认网络上不再可见,而只在moar网络中可见。这意味着前端服务不能再代理请求到后端,因此我得到如下错误:

试图代理到:localhost:3005/graphql/时发生错误

解决方案是将默认网络添加到前端服务的网络列表中,如下所示:

networks:
  moar:
    name: moar-network
    attachable: true

services:
  frontend:
    networks:
      - moar
      - default # here
    depends_on:
      - backend
    ports:
      - 3005:3000
  
  backend:
    ports:
      - 8005:8000

现在我们好了!


最后一件事,如果您想查看在给定网络中运行的服务,可以使用docker network inspect <network_name>命令。这帮助我发现前端服务不再是默认网络的一部分。

EAI_AGAIN是一个DNS查找超时错误,意味着它是一个网络连接错误或代理相关的错误。

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

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

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

我在码头合成上遇到了问题。原来我忘了把我的自定义隔离命名网络添加到我的服务中,但找不到。

TLDR;确保在compose文件中,在需要相互通信的两个服务上定义了自定义网络。

我的错误是这样的:error: getaddrinfo EAI_AGAIN minio-service。当使用minio-service主机名调用minio-service时,错误来自我的服务器后端。这告诉我minio-service的运行服务,不能被我的服务器的运行服务访问。我能够解决这个问题的方法是我改变了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:

关于docker-compose网络的更多细节可以在这里找到。

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

我的解决方案可能会帮助其他被标题“错误:getaddrinfo EAI_AGAIN”吸引到这里的人

当我试图从一个不同的虚拟机提供一个NodeJs和VueJs应用程序时,我遇到了这个错误。

vue.config.js文件如下:

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

当在原始机器上服务时,启动输出是:

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

在虚拟机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,
   },
 };

... 解决了问题。

在我的情况下,问题是docker网络的ip分配范围,详见这篇文章