やりたいこと
以下のようにポート競合エラーが起きたため、サーバ上で開いているポート番号とそのポート番号を利用しているプロセスを確認する。
# docker-compose up xx ERROR: for xx Cannot start service xx: b'driver failed programming external connectivity on endpoint..: Error starting userland proxy: listen tcp 0.0.0.0:9090: bind: address already in use' ERROR: Encountered errors while bringing up the project.
環境情報
- Red Hat Enterprise Linux Server 7.5
やり方
以下コマンドで確認を行う。
# netstat -apn
形式は以下のように標準出力される。
tcp6 0 0 :::9090 :::* LISTEN 1/systemd
以下、補足です。
補足
コンテナを起動したところ以下エラーとなったため
# docker run -d -p 9090:9090 prom/prometheus ... docker: Error response from daemon: driver failed programming external connectivity on endpoint xx : Error starting userland proxy: listen tcp 0.0.0.0:9090: bind: address already in use.
同コマンドで調査しました。
標準的にインストールされているnetstatを利用しましたが、lsofが利用できる場合は以下のようにポート番号を指定することでプロセスを発行しているコマンドの特定も可能です。
$ lsof -i :9090 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME app1 17130 root 3u IPv4 64665 0t0 TCP *:9090 (LISTEN)
尚、プロセス番号が分かれば以下にてコマンドの実態を抑えることもできます。
$ ls -l /proc/17130/exe
lrwxrwxrwx 1 root root 0 Mar 17 07:37 /proc/17130/exe -> /usr/bin/app1
|
以上、ご参考になれば幸いです。