💻

【Mac】占有portの調べ方と空け方

2021/12/04に公開

localなMacで開発をしているとたまに既にport使用してるからこのportは立ち上げらないよみたいなエラーが出て指定portが使えないということがあると思います。今回備忘録的に占有portの調べ方と空け方をまとめました。


portとは?

今回の記事で扱うものは localhostを立ち上げる際に使用するlocal serverのport番号のことです。ちなみにlocalhostとは、127.0.0.1を表すホスト名のことで、127.0.0.1とほぼイコールなので当たり前ですが、こちらも同一ホスト内でしか通信を行わないものになります。何らかの開発用サーバを立ち上げた際に使用するものが多いかと思います。

localhostや127.0.0.1 の違いについては以下の記事がわかりやすいです。

https://qiita.com/1ain2/items/194a9372798eaef6c5ab

localでfirestore emulatorを使用しようとして出たError

Error: Could not start Firestore Emulator, port taken.

他にも占有portを使おうとすると様々なerrorが出ますが、読んでみてport使っとるで!って出てたら以下の方法を試します。

portの調べ方

ターミナル(iTerm2)で以下のコマンドを叩きます。

sudo lsof -P -i:8080

実行結果は以下です。

いくつか立ち上がってるportが表示されてますね。

COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google      801 yukio   41u  IPv4 0x75edae0dcb0a3487      0t0  TCP localhost:58709->localhost:8080 (ESTABLISHED)
java      63918 yukio   84u  IPv4 0x75edae0dc798460f      0t0  TCP localhost:8080 (LISTEN)
java      63918 yukio   85u  IPv4 0x75edae0dc0885a5f      0t0  TCP localhost:8080->localhost:58709 (ESTABLISHED)

今回使用したい 8080 portが既に使われているのでkillして使用可能にしたいです。

port の空け方

  1. プロセス自体をkillする。

PIDを指定してプロセスをkillします。

MacBook-Pro ~ % sudo kill -9 63918

もう一度確認してみると

MacBook-Pro ~ % sudo lsof -P -i:8080
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google    801 jhcoder   41u  IPv4 0x75edae0dcb0a3487      0t0  TCP localhost:58709->localhost:8080 (CLOSE_WAIT)

良さそうですね。

  1. dockerの起動中コンテナがある場合はそれを止める

大体はこのケースなのかなと思います。コンテナを起動しっぱなしでportを占有している状態です。

dockerのコンテナの状態を以下のコマンドで確認できます。

docker-compose ps

今立ち上がっているコンテナを観れる。

プロジェクト内のdocker-compose.yamlのある場所でコマンド叩く。

docker ps

プロジェクト関係なく、全てのコンテナ状態を観れる。

止めるには以下のコマンドを使うといいです。

  • 一括コンテナ停止
docker stop $(docker ps -q)

どこにいても止めれる(全て)

  • コンテナを指定して止める(ディレクトリにdocker-compose.ymlがある場合そのコンテナのみ)
docker-compose stop

起動中のコンテナを止める(Exitできる)

そのprjのdocker-compose.yamlのある場所にいる必要があります。

これらでportを占有しているコンテナがあればそれを止めて、portを空けることができます。

Discussion