Sandcorp샌드코프 · 웹·AI 제품 개발

새 프로젝트 받는 중 · 갱신 2026.11sandcorp.co.krGitHub

← 팁

배포·인프라디버깅

새 서버로 옮기면 컨테이너 안 DNS부터 확인한다

호스트에서는 이름이 풀리는데 docker 빌드·컨테이너에서만 EAI_AGAIN이 나면 브리지 네트워크의 DNS 문제다.

새 서버에 옮겨 와 이미지를 빌드하는데 npm install이 EAI_AGAIN으로 멈춘다. 같은 서버의 호스트 셸에서는 curl도 nslookup도 잘 된다.

호스트와 컨테이너는 이름을 다른 길로 푼다. 기본 브리지 네트워크의 컨테이너는 호스트의 /etc/resolv.conf를 그대로 쓰지 못하고(로컬 주소를 가리키면 컨테이너에서는 닿지 않는다), 도커 데몬이 정한 DNS를 쓰며 그 트래픽은 브리지를 거쳐 나간다. 새 서버의 방화벽 규칙이나 DNS 설정이 이 길을 막으면 컨테이너 안에서만 이름 조회가 실패한다.

먼저 컨테이너 안에서 직접 확인한다.

# 컨테이너 안에서 이름이 풀리는지
docker run --rm alpine nslookup registry.npmjs.org

# 빠른 우회: 빌드를 호스트 네트워크로
docker build --network host -t app .

우회로 급한 불을 끈 뒤 근본 원인을 고친다. 도커 데몬 설정(/etc/docker/daemon.json)에 컨테이너가 닿을 수 있는 DNS를 지정하고, 방화벽(iptables/nftables)이 브리지 인터페이스의 트래픽을 막고 있지 않은지 본다.

{
  "dns": ["1.1.1.1", "8.8.8.8"]
}

서버를 옮길 때 점검 목록 맨 앞에 「컨테이너 안에서 이름 풀기」를 넣어 두면, 빌드 오류 메시지를 따라 엉뚱한 곳을 헤매지 않는다.

문의 →