nc 命令:反向主机查找失败:未知主机

nc command: inverse host lookup failed: Unknown host

nc 在 VM 上执行时工作正常。

Connection to 10.0.0.10 22 port [tcp/ssh] succeeded!

但是当我在我的 docker 容器中执行相同的命令时,它给出了下面的 UNKNOWN error/exception.

10.0.0.10: inverse host lookup failed: Unknown host 
(UNKNOWN) [10.0.0.10] 22 (ssh) open

下面是我正在使用的 nc 命令:

nc -vz 10.0.0.10 22 -w 4

是的,如果您没有通过 SSH 进入 docker 容器,这是预料之中的。

Connection to 10.0.0.10 22 port [tcp/ssh] succeeded! 在 VM 中可见,因为您已通过 SSH 作为 ssh username@10.0.0.10 进入 VM,并且端口 22 在 VM 中用于 SSH。

但是,当您在 docker 容器内时(使用 docker rundocker execdocker attach),端口 22not 被使用,因此 docker 容器内预计会出现来自 nc 的以下错误:

10.0.0.10: inverse host lookup failed: Unknown host 
(UNKNOWN) [10.0.0.10] 22 (ssh) open

以下是在 nginx docker 容器内使用 nc 成功测试是否使用端口 80 的步骤:

$ sudo docker run --name docker-nginx -d -p 80:80 nginx
$ sudo docker exec -it docker-nginx /bin/bash
root@60ec582e90f4:/# apt-get -y update
root@60ec582e90f4:/# apt-get -y upgrade
root@60ec582e90f4:/# apt-get install -y net-tools
root@60ec582e90f4:/# apt-get install -y netcat   

# make sure that port 80 is used
root@60ec582e90f4:/# netstat -pan | grep 80
tcp     0   0 0.0.0.0:80   0.0.0.0:*   LISTEN  1/nginx: master pro 

# nc will work now inside the nginx container as port 80 is used inside the container

root@60ec582e90f4:/# nc -vz 127.0.0.1 80 -w 4
localhost [127.0.0.1] 80 (?) open

因此,要使 nc -vz a.b.c.d P -w 4 在容器内工作,端口 P 必须用于该容器内的 IP 地址 a.b.c.d

"Inverse host lookup failed" 只是意味着 nc 想打印 10.0.0.10 对应的主机名,但不能。

UNKNOWN 就是它随后作为主机名打印的内容。

这与 "I looked it up, but it doesn't seem to correspond to anything" 不同,后者发生在容器外。

明确地说,连接到主机成功,但从 IP 地址查找其名称失败。这只是一条信息性警告消息,不是硬错误;无论如何,查找完全是可选的,并且可以使用 -n.

禁用

如果你真的想避免这个警告而不是切换到 -n,你需要在容器内设置工作 DNS。

只需在侦听器和客户端的两侧加上 -n 即可消除此错误,因为它会忽略使用它进行的 DNS 查找。