web-dev-qa-db-fra.com

commande nc: échec de la recherche d'hôte inverse: hôte inconnu

nc fonctionne très bien lorsque je l'exécute sur une machine virtuelle.

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

Mais lorsque j'exécute la même commande dans mon conteneur Docker, cela donne l'erreur/exception INCONNUE ci-dessous.

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

Ci-dessous se trouve la commande nc que j'utilise:

nc -vz 10.0.0.10 22 -w 4
6
Rohith

"La recherche inversée d'hôte a échoué" signifie simplement que nc voulait imprimer à quel nom d'hôte 10.0.0.10 correspond, mais n'a pas pu.

INCONNU est simplement ce qu'il imprime ensuite comme nom d'hôte.

C'est différent de "J'ai cherché, mais cela ne semble correspondre à rien", ce qui se passe à l'extérieur du conteneur.

Pour être parfaitement explicite, la connexion à l'hôte a réussi, mais la recherche de son nom à partir de l'adresse IP a échoué. Ceci est juste un message d'avertissement informatif, pas une erreur grave; la recherche est de toute façon entièrement facultative et peut être désactivée avec -n.

Si vous voulez vraiment éviter cet avertissement et ne pas passer à -n, vous devez configurer un DNS fonctionnel dans le conteneur.

8
tripleee

il suffit de mettre -n des deux côtés de l'écouteur et du client pour supprimer cette erreur car il négligera la recherche DNS en l'utilisant.

8
siddharth

Oui, cela est prévu si vous avez pas SSH dans le conteneur Docker.

Connection to 10.0.0.10 22 port [tcp/ssh] succeeded! apparaît dans le VM parce que vous avez SSH dans le VM as ssh [email protected] et port 22 est utilisé dans le VM pour SSH.

Mais, lorsque vous êtes dans un conteneur Docker (en utilisant docker run ou docker exec ou docker attach), Port 22 sera pas utilisé, et donc l'erreur suivante de nc est attendue dans le conteneur docker:

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

Voici les étapes pour tester avec succès si le port 80 est utilisé en utilisant nc dans un nginx docker container:

$ 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

Par conséquent, pour nc -vz a.b.c.d P -w 4 pour fonctionner à l'intérieur d'un conteneur, le port P doit être utilisé sur l'adresse IP a.b.c.d à l'intérieur de ce conteneur.

1
Vikram Hosakote