nc
は、VMで実行すると正常に機能します。
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
「Inverse Host lookup failed」は、nc
がどのホスト名10.0.0.10に対応するかを表示したかったが、できなかったことを意味します。
UNKNOWNは、ホスト名として出力されるものです。
これは、「調べましたが、何にも対応していないようです」とは異なります。これは、コンテナの外側で発生します。
完全に明示するために、ホストへの接続は成功しましたが、IPアドレスからの名前の検索は失敗しました。これは単なる警告メッセージであり、ハードエラーではありません。とにかく、ルックアップは完全にオプションであり、-n
で無効にできます。
本当にこの警告を回避し、-n
に切り替えたくない場合は、コンテナ内で動作するDNSを設定する必要があります。
このエラーを使用してDNSルックアップを無視するため、リスナーとクライアントの両側に-nを追加してこのエラーを削除します。
はい、notがdockerコンテナにSSHで接続されている場合、これは予期されています。
Connection to 10.0.0.10 22 port [tcp/ssh] succeeded!
は、VMで見られます。なぜなら、VMとしてssh [email protected]
およびポート22
は、SSHのVMで使用されます。
ただし、Dockerコンテナ内にいる場合(docker run
またはdocker exec
またはdocker attach
)、 港 22
はnotが使用されるため、nc
からの次のエラーがdockerコンテナ内で予想されます。
10.0.0.10: inverse Host lookup failed: Unknown Host
(UNKNOWN) [10.0.0.10] 22 (ssh) open
以下に、ポート80
は、nc
dockerコンテナー内で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
コンテナ内で動作するには、ポートP
をIPアドレスで使用する必要がありますa.b.c.d
そのコンテナ内。