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
反向主机查找失败
" 的意思是nc
想要打印出 10.0.0.10 对应的主机名,但没有成功。-n
禁用。-n
,你需要在容器内设置工作正常的 DNS。只需在监听器和客户端两侧提供-n
选项,即可消除此错误,因为它将通过使用该选项来忽略DNS查找。
如果您没有通过SSH登录到Docker容器中,则会出现此情况。
在虚拟机中看到连接到10.0.0.10 22端口[tcp/ssh]成功!
是因为您已经作为ssh username@10.0.0.10
登录到虚拟机中,并且端口22
用于SSH。
但是,当您在Docker容器内部(使用docker run
或docker exec
或docker attach
)时,端口22
将不会被使用,因此在Docker容器内部预计会出现以下来自nc
的错误:
10.0.0.10: inverse host lookup failed: Unknown host
(UNKNOWN) [10.0.0.10] 22 (ssh) open
$ 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
。