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

25

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
3个回答

29
"

反向主机查找失败

" 的意思是 nc 想要打印出 10.0.0.10 对应的主机名,但没有成功。
"UNKNOWN" 就是它打印的主机名。
这与在容器外发生的 "我查了一下,但似乎没有对应的东西" 是不同的。
明确地说,连接到主机成功,但从 IP 地址查找其名称失败。这只是一条信息性的警告消息,不是硬错误;查找完全是可选的,并且可以使用 -n 禁用。
如果你真的想避免这个警告而不切换到 -n,你需要在容器内设置工作正常的 DNS。

2
因此,有了这个“反向主机查找失败:未知主机”的异常,我们可以假设连接成功了吗?因为我的意图是进行SSH测试。 - Rohith
反向查找仅用于人类友好的输出,对于请求的操作是否成功没有任何影响(除非您正在测试工作DNS)。 - tripleee
2
@Rohith 那么,最终,“open”部分是否意味着连接成功?因为这也让我感到困惑... - GileBrt
2
@GileBrt 现在查看更新的答案。连接成功。 - tripleee

10

只需在监听器和客户端两侧提供-n选项,即可消除此错误,因为它将通过使用该选项来忽略DNS查找。


3

如果您没有通过SSH登录到Docker容器中,则会出现此情况。

在虚拟机中看到连接到10.0.0.10 22端口[tcp/ssh]成功!是因为您已经作为ssh username@10.0.0.10登录到虚拟机中,并且端口22用于SSH。

但是,当您在Docker容器内部(使用docker rundocker execdocker attach)时,端口22不会被使用,因此在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工作,必须在该容器内使用IP地址a.b.c.d上的端口P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接