特定のポートでどのプロセスがリッスンしているかを確認する

特定のポートでどのプロセスがリッスンしているかを確認する

私の人生初めて、どのプロセスがLinuxの特定のポートをリッスンしているのかわかりません。 :)

これは K8s を実行する Ubuntu Server 22.04 インストールです。クラスタには、ポート80と443にバインドされた受信コントローラがあります。これが機能する理由は次のとおりです。

:~# curl localhost
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

:~# curl localhost:443
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>

~# curl https://localhost:443 -k
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

問題は、どのプロセスがこれらのポートにどのようにバインドされるかを知ることができないことです。を試してみましたが、ss何も表示されません。

:~# ss -tlnpu | grep 80
tcp   LISTEN 0      4096          192.168.13.191:2380       0.0.0.0:*    users:(("etcd",pid=1452,fd=8))           
tcp   LISTEN 0      4096               127.0.0.1:2380       0.0.0.0:*    users:(("etcd",pid=1452,fd=7))           

:~# ss -tlnpu | grep 443
tcp   LISTEN 0      4096                       *:6443             *:*    users:(("kube-apiserver",pid=1546,fd=7)) 

ポートでリッスンしている実際のプロセスを見つけるには?

ベストアンサー1

特定のケースではKubernetesを実行しているため、dockerコマンドを使用してそのポートでリッスンしているコンテナを見つけるのに最適な機会があります。

$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
CONTAINER ID        NAMES                    PORTS
a690f047d3c8        quizzical_sanderson      0.0.0.0:8080->8080/tcp, 8443/tcp         
431ff622ad62        tender_payne             0.0.0.0:9191->9090/tcp
78941a2ee170        awx_task                 8052/tcp
2f5fc70ac576        awx_web                  0.0.0.0:80->8052/tcp, 0.0.0.0:443->8053/tcp

コンテナがawx_webホストのポート80と443をコンテナのプライベートネットワークネームスペースからそれぞれポート8052と8053に転送するのがわかります。

docker psパラメータなしで直接実行することもできます--format。私はこの--formatパラメータを使用してより読みやすく便利にしました。

おすすめ記事