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

fnx2tebb  于 5个月前  发布在  Unix
关注(0)|答案(3)|浏览(121)

nc在虚拟机上运行时运行良好。

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

字符串
但是当我在docker容器中执行相同的命令时,它给出了下面的UNKNOWN错误/异常。

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

mwyxok5s

mwyxok5s1#

“Inverse host lookup failed”只是表示nc想要打印10.0.0.10对应的主机名,但是不能。
UNKNOWN只是它随后打印的主机名。
这与“我查了一下,但它似乎不对应于任何东西”不同,后者是在容器外部发生的情况。
非常明确地说,连接到主机成功,但从IP地址查找其名称失败。这只是一条信息性警告消息,而不是硬错误;无论如何,查找完全是可选的,并且可以使用-n禁用。
如果你真的想避免这个警告,而不是切换到-n,你需要在容器内设置工作DNS。

jdg4fx2g

jdg4fx2g2#

只需在侦听器和客户端的两端提供-n选项即可删除此错误,因为使用它会忽略DNS查找。

6qftjkof

6qftjkof3#

是的,这是预期的,如果你没有SSH'ed到docker容器。
在虚拟机中可以看到Connection to 10.0.0.10 22 port [tcp/ssh] succeeded!,因为您已将SSH“艾德”作为ssh [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)插入虚拟机,并且虚拟机中的端口22用于SSH。
但是,当你在一个docker容器(使用docker rundocker execdocker attach)中时,端口22
不**被使用,因此以下来自nc的错误将在docker容器中出现:

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

字符串
以下是成功测试80端口是否在nginx Docker容器中使用nc的步骤:

$ 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

相关问题