こんにちは、InfraAcademyを運営しているryuです。
今回の記事では、LinuxやDockerコンテナで、
nslookup: command not found
と表示された場合の対処方法を解説します。
結論からいうと、多くの場合はnslookup コマンドを含むDNSツールのパッケージがインストールされていないことが原因です。
ただし、Linuxディストリビューションによってインストールするパッケージ名が違います。
例えば、
- Ubuntu:
dnsutilsまたはbind9-dnsutils - Debian:
bind9-dnsutils - RHEL系:
bind-utils - Alpine Linux:
bind-tools
です。
元の記事ではUbuntu / Debian系の dnsutils だけを紹介していましたが、DockerではAlpine Linuxなどの軽量イメージを使うことも多いため、OSごとに確認した方が早く解決できます。
この記事では、command not found の意味から、OS別のインストール方法、PATHの確認、dig や host を使った代替方法まで順番に解説します。
nslookup: command not found とは?¶
まず、次のように実行したとします。
nslookup example.com
しかし、
bash: nslookup: command not found
または、
sh: nslookup: not found
のように表示されることがあります。

command not found は、シェルが実行しようとしたコマンドを見つけられなかったという意味です。
主な原因は次の3つです。
nslookupがインストールされていない- 実行ファイルはあるがPATHに含まれていない
- コンテナなどの最小構成OSを使っていてDNSツール自体が省かれている
実際には、1または3のケースが多いと思います。
まずLinuxの種類を確認する¶
いきなり、
apt install dnsutils
と実行する前に、どのLinuxを使っているか確認しましょう。
次のコマンドを実行します。
cat /etc/os-release
例えばUbuntuなら、
NAME="Ubuntu"
Debianなら、
NAME="Debian GNU/Linux"
Alpine Linuxなら、
NAME="Alpine Linux"
などと表示されます。
Dockerコンテナの場合は、ベースイメージによってパッケージ管理コマンドも変わるため、この確認が大切です。
Ubuntuでnslookupをインストールする¶
Ubuntuでは、次のコマンドでインストールできます。
sudo apt update
sudo apt install dnsutils
Ubuntuの現在のパッケージでは、dnsutils は bind9-dnsutils へつながるパッケージとして提供されています。
そのため、環境によっては直接、
sudo apt install bind9-dnsutils
としても構いません。
インストール後に、
nslookup example.com
を実行して確認します。
Debianでnslookupをインストールする¶
現在のDebianでは、nslookup は bind9-dnsutils に含まれています。
sudo apt update
sudo apt install bind9-dnsutils
インストール後、
command -v nslookup
を実行すると、
/usr/bin/nslookup
のように実行ファイルの場所を確認できます。
RHEL / Rocky Linux / AlmaLinux系の場合¶
Red Hat系のLinuxでは、BINDのDNSユーティリティーをまとめた bind-utils を利用します。
環境に応じて、
sudo dnf install bind-utils
を実行します。
古い環境では yum が使われることもありますが、現在のRHEL系では dnf を利用するケースが一般的です。
インストール後に、
nslookup example.com
を確認します。
Alpine Linuxの場合¶
Dockerでよく使われるAlpine Linuxでは、Debian系の apt は使えません。
Alpineでは、
apk add bind-tools
を実行します。
bind-tools には、
nslookup
dig
host
などのDNSツールが含まれています。
Dockerコンテナ内で、
apk: command not found
ではなく、
apt: command not found
が出ている場合は、「Ubuntuだと思っていたけれど実はAlpineだった」ということもあります。
まず /etc/os-release を確認するのがおすすめです。
Dockerコンテナでnslookupが無いのは珍しくない¶
Dockerイメージは、ファイルサイズを小さくするために最低限のツールしか入っていないことがあります。
例えば、
FROM ubuntu:24.04
や、
FROM alpine:3.22
をベースにした環境でも、DNS調査用のコマンドが最初から全て入っているとは限りません。
そのため、
ホストPCではnslookupが使える
↓
Dockerコンテナではcommand not found
という状態は不思議ではありません。
デバッグ用に一時的に入れるだけならコンテナ内でインストールできますが、毎回必要ならDockerfileへ追加する方法もあります。
Ubuntu系なら例えば、
RUN apt-get update \
&& apt-get install -y --no-install-recommends dnsutils \
&& rm -rf /var/lib/apt/lists/*
です。
Alpineなら、
RUN apk add --no-cache bind-tools
とできます。
ただし、本番用コンテナには必要のないデバッグツールを大量に入れない方がよい場合もあります。
目的に応じて判断しましょう。
nslookupがインストール済みか確認する¶
まずは、
command -v nslookup
を実行します。
見つかれば、
/usr/bin/nslookup
などが表示されます。
見つからなければ何も表示されません。
次のようにバージョンを確認する方法もあります。
nslookup -version
環境によって表示形式は異なりますが、コマンド自体が動くかを確認できます。
PATHが原因か確認する¶
パッケージをインストールしたのに実行できない場合は、PATHを確認します。
echo $PATH

PATHは、シェルがコマンドを探すディレクトリの一覧です。
例えば、
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
のように表示されます。
nslookup の場所を確認できている場合は、
command -v nslookup
や、
find /usr -name nslookup 2>/dev/null
などで実行ファイルを確認できます。
ただし、通常のパッケージマネージャーから nslookup をインストールした場合、標準的なPATHに配置されるため、PATHを手作業で追加しなければならないケースはそれほど多くありません。
元記事ではPATH変更を主要な対処方法としていましたが、まずは正しいパッケージをインストールできているか確認する方がよいでしょう。
nslookup の基本的な使い方¶
インストールできたら、実際にDNSへ問い合わせてみましょう。
nslookup example.com
Aレコードなどを確認できます。
DNSサーバーを指定する場合は、
nslookup example.com 8.8.8.8
のように指定できます。
環境で設定されているDNSサーバーを確認するだけでなく、「特定のDNSサーバーへ問い合わせた場合はどうなるか」を比較する際に便利です。
dig を使う方法¶
DNSを詳しく調査するなら、dig も便利です。
dig example.com
DNSサーバーを指定するなら、
dig @8.8.8.8 example.com
です。
レコード種別を指定することもできます。
dig example.com A
dig example.com MX
dig example.com TXT
トラブルシューティングでは、nslookup よりも dig の出力の方が詳しく、確認しやすい場合があります。
host を使う方法¶
簡単に名前解決を確認したい場合は host も利用できます。
host example.com
表示がシンプルなので、
「このドメイン名がどのIPアドレスへ名前解決されるかだけ見たい」
という場合に使いやすいです。
nslookup、dig、host はすべてDNSを調べるコマンドですが、表示内容や用途が少し違います。
command not found とDNSエラーを混同しない¶
ここは重要です。
次のエラーは、
nslookup: command not found
なので、コマンド自体を実行できていません。
一方、
server can't find example.invalid: NXDOMAIN
のようなエラーは、nslookup 自体は動いています。
そのうえでDNSから「その名前は存在しない」という応答を受けています。
つまり、
command not found
→ Linux環境・パッケージの問題
NXDOMAIN / SERVFAIL / timeout
→ DNS問い合わせの問題
です。
ここを切り分けられるだけでも、トラブルシューティングがかなりしやすくなります。
DNSのトラブルは「どこで失敗しているか」を切り分ける¶
DNSで問題が起きた場合、いきなり設定ファイルを変更するのではなく、順番に確認しましょう。
例えば、
1. nslookupコマンドは存在する?
2. DNSサーバーへ問い合わせできる?
3. 特定のドメインだけ失敗する?
4. 別のDNSサーバーなら成功する?
5. ネットワーク自体には接続できている?
という流れです。
command not found は1番目で止まっている状態です。
まずツールを実行できる状態にしてから、DNSそのものを調査します。
Linuxとネットワークはセットで学ぶと分かりやすい¶
nslookup は単なるコマンドではなく、
ドメイン名
↓
DNSサーバーへ問い合わせ
↓
IPアドレス
という名前解決の仕組みを確認するツールです。
そのため、コマンドだけ暗記するより、
- DNSとは何か
- IPアドレスとは何か
/etc/resolv.confは何を設定しているのか- AレコードやMXレコードとは何か
までつなげて学ぶと理解しやすくなります。
InfraAcademyでは、Linuxだけでなくネットワークやサーバー構築など、インフラエンジニアに必要な基礎を体系的に学習できます。
「コマンドは打てるけど、なぜその結果になるのか分からない」という方は、Linuxとネットワークを一緒に学んでみてください。
nslookup: command not found のまとめ¶
今回は、
nslookup: command not found
と表示された場合の対処方法を解説しました。
まず、
cat /etc/os-release
でLinuxの種類を確認してください。
そのうえで、環境に合ったパッケージをインストールします。
Ubuntu → dnsutils / bind9-dnsutils
Debian → bind9-dnsutils
RHEL系 → bind-utils
Alpine Linux → bind-tools
インストール後は、
command -v nslookup
nslookup example.com
で確認します。
また、dig や host もDNS調査で便利なコマンドです。
command not found とDNSの名前解決失敗は別の問題なので、まず「コマンドが実行できるのか」「DNS問い合わせが失敗しているのか」を切り分けることが大切です。



