MeWrite Docs

DNS: getaddrinfo ENOTFOUND

DNS名前解決に失敗した場合のエラー

概要

ホスト名からIPアドレスへのDNS名前解決に失敗した場合に発生するエラーです。ドメイン名の誤り、DNSサーバーの問題、ネットワーク設定の問題などが原因です。

エラーメッセージ

Error: getaddrinfo ENOTFOUND api.example.com

または

curl: (6) Could not resolve host: api.example.com

原因

  1. ドメイン名の誤り: スペルミスや存在しないドメイン
  2. DNSサーバー問題: DNSサーバーが応答しない
  3. ネットワーク接続: インターネット接続がない
  4. DNS伝播遅延: 新規ドメインの伝播待ち

解決策

1. ドメイン名の確認

1
2
3
4
5
6
7
8
# DNSルックアップ
nslookup api.example.com

# dig コマンド
dig api.example.com

# host コマンド
host api.example.com

2. DNSサーバーの指定

1
2
3
4
5
6
7
8
9
# 特定のDNSサーバーを使用
nslookup api.example.com 8.8.8.8

dig @8.8.8.8 api.example.com

# 一般的なパブリックDNS
# Google: 8.8.8.8, 8.8.4.4
# Cloudflare: 1.1.1.1, 1.0.0.1
# OpenDNS: 208.67.222.222

3. DNSキャッシュのクリア

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Windows
ipconfig /flushdns

# Linux (systemd-resolved)
sudo systemd-resolve --flush-caches

# Linux (nscd)
sudo service nscd restart

4. /etc/hosts で直接指定

1
2
# /etc/hosts に追加
echo "192.168.1.100 api.example.com" | sudo tee -a /etc/hosts

5. Node.js での対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const dns = require('dns');

// カスタムDNSサーバーを設定
dns.setServers(['8.8.8.8', '8.8.4.4']);

// 手動でDNSルックアップ
dns.resolve('api.example.com', (err, addresses) => {
  if (err) {
    console.error('DNS lookup failed:', err);
    return;
  }
  console.log('IP addresses:', addresses);
});

// リトライ付きリクエスト
const axios = require('axios');

async function fetchWithRetry(url, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      return await axios.get(url);
    } catch (error) {
      if (error.code === 'ENOTFOUND' && i < retries - 1) {
        await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
        continue;
      }
      throw error;
    }
  }
}

6. Docker でのDNS問題

1
2
3
4
5
6
7
8
9
# docker-compose.yml
services:
  app:
    dns:
      - 8.8.8.8
      - 8.8.4.4

# または docker run
docker run --dns 8.8.8.8 myapp
1
2
3
4
5
# Docker デーモンのDNS設定
# /etc/docker/daemon.json
{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

7. Kubernetes でのDNS問題

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Pod のDNS設定
apiVersion: v1
kind: Pod
spec:
  dnsPolicy: ClusterFirst
  dnsConfig:
    nameservers:
      - 8.8.8.8
    searches:
      - default.svc.cluster.local

# CoreDNS の確認
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system -l k8s-app=kube-dns

8. VPN/プロキシの確認

1
2
3
4
5
6
7
# VPN接続状況を確認
ifconfig | grep -A 5 "utun"

# プロキシ設定を確認
echo $HTTP_PROXY
echo $HTTPS_PROXY
echo $NO_PROXY

9. DNS伝播の確認

1
2
3
4
5
6
7
8
# 複数のDNSサーバーで確認
for dns in 8.8.8.8 1.1.1.1 208.67.222.222; do
  echo "=== $dns ==="
  dig @$dns example.com +short
done

# DNSChecker でオンライン確認
# https://dnschecker.org/

10. ネットワーク診断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 接続テスト
ping -c 4 8.8.8.8

# トレースルート
traceroute api.example.com

# ネットワークインターフェース確認
ip addr show
# または
ifconfig

よくある間違い

  • HTTPSのURLにhttpを使用(またはその逆)
  • サブドメインの入力ミス(www.の有無)
  • プライベートネットワーク内のホスト名を外部から解決
  • VPN接続時のスプリットトンネリング設定

Network の他のエラー

最終更新: 2025-12-09