source

'getaddrinfo EAI_AGAIN' 오류의 원인은 무엇입니까?

manysource 2023. 1. 27. 21:22

'getaddrinfo EAI_AGAIN' 오류의 원인은 무엇입니까?

서버가 오늘 이 오류를 발생시켰습니다.이것은 지금까지 본 적이 없는 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할할 ?? ?? 드의 어어 부??다른 도메인에서 이 오류를 재생성하려면 어떻게 해야 합니까?

Firebase Cloud Functions에서 이 오류가 발생할 경우 이는 프리티어의 제한(Google 서비스에만 허용된 아웃바운드 네트워킹) 때문입니다.

Flame 또는 Blaze 계획으로 업그레이드하여 작동합니다.

여기에 이미지 설명 입력

EAI_AGAIN은 DNS 룩업타임아웃 오류입니다.즉, 네트워크 접속 오류 또는 프록시 관련 오류입니다.

주요 질문은 dns.js는 어떤 역할을 합니까?

  • dns.js는 노드의 도메인 IP 주소 취득에 사용됩니다(간단).

기타 정보 : http://www.codingdefined.com/2015/06/nodejs-error-errno-eaiagain.html

도커 컨테이너 내부에서 오류가 발생한 경우(실행 시 등)npm install알파인 컨테이너 내부의 원인은 컨테이너가 시작된 이후 네트워크가 변경되었기 때문일 수 있습니다.

이 문제를 해결하려면 컨테이너를 중지했다가 다시 시작하십시오.

docker-compose down
docker-compose up

출처 : https://github.com/moby/moby/issues/32106#issuecomment-578725551

xerq의 훌륭한 답변에서 알 수 있듯이 이는 DNS 타임아웃 문제입니다.

Windows Subsystem for Linux 를 사용하고 계신 분들에게 또 다른 가능한 답변을 드리고 싶습니다.Windows 가 sleep 에서 복귀한 후에 클라이언트 OS 로 뭔가 삐걱거리는 것처럼 보이는 경우가 있습니다.호스트 OS 를 재기동하면, 이러한 문제가 해결됩니다(WSL 서비스를 재기동해도 같은 일이 발생할 가능성이 있습니다).

호스트(OP 의 에러)를 합니다.my-store.myshopify.com도메인이 지정되지 않은 것을 제외하고 발생한 오류는 모든 면에서 동일합니다.

제 솔루션은 "Error: 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/

에서 tstvm07OP에 기재되어 있는 에러와 매우 유사한 에러를 취득했습니다.

 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,
   },
 };

...문제를 해결했다.

이것은 호스트 파일 설정과 관련된 문제입니다.Ubuntu에서 호스트 파일에 /etc/hosts 행을 추가합니다.

127.0.0.1   localhost

윈도: c:\windows\System32\drivers\etc\hosts

127.0.0.1   localhost

도커 컨테이너 내에서 동작하고 있는 GraphQL API 어플리케이션에 사소한 업데이트를 한 후 이 에러(다른 스택트레이스)가 발생하기 시작했습니다.어떤 이유로든 컨테이너는 API에 의해 사용되는 백엔드 서비스를 해결하는 데 어려움을 겪고 있었습니다.

빌드하고 있던 도커 베이스 이미지(node:13-alpine, 덧붙여서)에 변화가 생겼는지 살펴본 후 재부팅하는 가장 오래된 컴퓨터 사이언스 트릭을 시도하기로 했습니다.나는 도커 컨테이너를 멈추고 시동을 걸었고 모든 것이 정상으로 돌아갔다.

분명히, 이것은 근본적인 문제에 대한 의미 있는 해결책은 아닙니다.- 토끼구멍을 너무 깊이 파고들지 않고 문제를 해결했기 때문에 저는 단지 이 글을 올렸습니다.

이 경우 도커 네트워크의 IP 할당 범위가 문제였습니다.자세한 내용은 이 게시물을 참조하십시오.

도커 컴포지트에서 이 문제를 겪고 있었어요.커스텀 격리된 이름의 네트워크를 서비스에 추가하는 것을 잊어버렸는데 찾을 수 없었습니다.

TLDR: compose 파일에 서로 통신해야 하는 두 서비스 모두에서 커스텀네트워크가 정의되어 있는지 확인합니다.

이렇게 .Error: getaddrinfo EAI_AGAIN minio-service에서, minio-serviceminio-service호스트명을 지정합니다. '이렇게 하다'라고 할 수 있어요.minio-service중인 서비스에 할 수 server가 서비스를 실행하고 있습니다.할 수 를 다음과같이 입니다.

  • docker-param.yml
version: "3.8"

# ...

services:
  server:
    # ...
    networks:
      my-network:
    # ...
  minio-service:
    # ... (missing networks: section)

# ...

networks:
  my-network:

커스텀 격리된 이름 있는 네트워크를 포함하려면 다음과 같이 하십시오.

  • docker-param.yml
version: "3.8"

# ...

services:
  server:
    # ...
    networks:
      my-network:
    # ...
  minio-service:
    # ...   
    networks:
      my-network:
    # ...

# ...

networks:
  my-network:

도커 구성 네트워킹에 대한 자세한 내용은 여기를 참조하십시오.

하루에 수천 또는 수백만 건의 요청을 수행하고 이 문제에 대한 솔루션이 필요한 경우:

그런 건 보통이에요.getaddrinfo EAI_AGAIN서버에서 많은 요청을 수행할 때 오류가 발생합니다.Node.js 의 DNS 의 OS 의 DNS 의 DNS 의 설정.

모든 http/https 요구는 DNS 검색을 실행하므로 이 병목현상을 피하기 위해 비용이 많이 들 수 있습니다.getaddrinfoDNS 캐시를 구현할 수 있습니다.

http.request (및 https)는,lookup기본 속성

http.get('http://example.com', { lookup: yourLookupImplementation }, response => {
    // do something here with response
});

버그를 추적하기 어려운 것을 피하기 위해 TTL을 올바르게 처리해야 하므로 DNS 캐시를 직접 쓰는 것이 아니라 이미 테스트된 모듈을 사용하는 것이 좋습니다.

사용하는 것은 개인적으로 사용하고 있습니다(옵션 참조).

특정 요청에 사용할 수 있습니다.

const http = require('http');
const CacheableLookup = require('cacheable-lookup');

const cacheable = new CacheableLookup();

http.get('http://example.com', {lookup: cacheable.lookup}, response => {
    // Handle the response here
});

또는 글로벌하게

const http = require('http');
const https = require('https');
const CacheableLookup = require('cacheable-lookup');

const cacheable = new CacheableLookup();

cacheable.install(http.globalAgent);
cacheable.install(https.globalAgent);

메모: Node.js를 통해 요청이 수행되지 않은 경우 유의하십시오.http/https모듈, 사용.install글로벌 에이전트에 대한 요구는 해당 요청에 영향을 미치지 않습니다(예:

@xerq가 올바르게 지적되었습니다.여기 더 많은 레퍼런스가 있습니다.http://www.codingdefined.com/2015/06/nodejs-error-errno-eaiagain.html

같은 에러가 발생했습니다.윈도 OS의 이 위치 아래에 있는 파일을 업데이트하여 해결했습니다.

C:\Windows\System32\drivers\etc

도움이 되었으면 좋겠다!!

VPN에 접속되어 있는 경우 Windows 터미널 내에서 Ubuntu를 실행할 때 오류가 발생하지만 Windows 터미널 내부가 아닌 Windows에서 Ubuntu를 직접 열 때는 오류가 발생하지 않습니다.

여기에 이미지 설명 입력

AWS와 Serverless에서도 같은 문제가 있었습니다.로 시도했다.eu-central-1지역도 안 되고, 그래서 제가 그걸 바꿔야 했습니다.us-east-2예를 들어 보겠습니다.

최근에 새로 추가한 후 이 오류가 발생했습니다.network내 도킹 스테이션 파일에 저장해 주세요

처음에는 다음과 같은 서비스를 받았습니다.

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

원하는 다른 서비스를 호스트하는 새 네트워크를 추가하기로 결정했습니다.frontend접속할 수 있도록 서비스를 제공했습니다.그래서 저는 이렇게 했습니다.

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

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

불행히도, 위에서 만든 것이 내 마음을frontend서비스가 에 표시되지 않게 되었습니다.default네트워크, 및 에만 표시된다.moar네트워크.즉, 이 경우frontend서비스가 더 이상 프록시 요청을 할 수 없습니다.backend따라서 다음과 같은 오류가 발생했습니다.

프록시를 수행하는 동안 오류가 발생했습니다. localhost: 3005/graphql/

해결방법은 다음과 같은 것을 추가하는 것입니다.default네트워크 접속frontend다음과 같이 서비스의 네트워크 목록:

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>명령어를 발행합니다. 제가 '이렇게 하다'라는 것을 해 준 입니다.frontend서비스가 기본 네트워크에 포함되지 않게 되었습니다.

Blaze를 활성화했는데도 여전히 작동하지 않습니까?

이 할 것 같습니다..env 경로인 '경로'에서require('dotenv').config({ path: __dirname + './../.env' }); 동작하지 않습니다(또는 다른 경로).간단히 말하면.envfunctions서부터 「」에 전개합니다.Firebase.

언급URL : https://stackoverflow.com/questions/40182121/whats-the-cause-of-the-error-getaddrinfo-eai-again