为什么节点 nc (netcat) 给出错误“反向主机查找失败:未知主机”?

问题描述 投票:0回答:3
当我在虚拟机上执行它时,

nc
工作正常。

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

但是当我在 docker 容器中执行相同的命令时,它会给出以下未知错误/异常。

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
unix netcat
3个回答
30
投票

“反向主机查找失败”只是意味着

nc
想要打印 10.0.0.10 对应的主机名,但不能。

UNKNOWN 就是它随后打印的主机名。

这与“我查了一下,但它似乎与任何内容都不对应”不同,后者是在容器外部发生的情况。

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

-n
禁用。

如果您确实想避免此警告而不切换到

-n
,则需要在容器内设置工作 DNS。


10
投票

只需在侦听器和客户端两侧提供

-n
选项即可消除此错误,因为使用它会忽略 DNS 查找。


3
投票

是的,如果您没有通过 SSH 连接到 docker 容器,这是预期的。

在 VM 中可以看到

Connection to 10.0.0.10 22 port [tcp/ssh] succeeded!
,因为您已通过 SSH 连接到 VM 作为
ssh [email protected]
,并且端口
22
在 VM 中用于 SSH。

但是,当您位于 docker 容器内(使用

docker run
docker exec
docker attach
)时,将不会使用端口
22
,因此 nc 预计会在 docker 内部出现以下错误容器:

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

以下是在 
80

docker 容器内使用

nc
成功测试是否使用端口
nginx
的步骤:

$ 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

在容器内工作,必须在该容器内的 IP 地址

P
上使用端口
a.b.c.d
    

© www.soinside.com 2019 - 2024. All rights reserved.