【Mac】占有portの調べ方と空け方
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 の空け方
- プロセス自体を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)
良さそうですね。
- 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