こんばんは! @dz_ こと大平かづみです。
Azure Cosmos DB Emulator のポートが競合しているときの解消方法です。
Prologue - はじめに
Azure Functions などをローカルで開発するとき、ローカルで Azure Cosmos DB を利用できる Azure Cosmos DB Emulator を併用すると便利ですよね。
でも、いざ起動したときにこのようなポート競合エラーに遭うことはありませんか?
Port 10250 is already in use.
Use /mongoport=port to specify a different port
解決方法
解決方法1: 競合しているタスクを停める
私の場合は、 PowerShell でそのポートを使っているプロセス、アプリケーションを特定して止めます。ここでは、 9999
というPIDのタスクが利用しているようです。
# 競合しているポート 10250 を LISTEN しているプロセスIDを取得する
netstat -ano | findstr "10250"
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:10250 0.0.0.0:0 LISTENING 9999
次に、そのそのプロセスIDのタスクを確認します。私の場合は NFCProxyService.exe が使ってました。
# そのプロセスIDのタスクを確認する
tasklist |findstr "9999"
NFCProxyService.exe 6412 Services 0 4,904 K
解決方法1: 競合しているタスクを停止する
この場合においては、 NFCProxyService.exe は PaSoRi 由来のサービスで今は使わないので、サービスを停止します。
サービスでなくとも、そのアプリケーションを終了するなどタスクを停止します。
解決方法2: Azure Cosmos DB Emulator の起動ポートを変更する
Azure Cosmos DB Emulator はコマンドラインでも操作できます。下記のように、ポートを変更して起動することも可能です。指定するポートがすでに使われないか確認の上、実行してください。
& 'C:\Program Files\Azure Cosmos DB Emulator\CosmosDB.Emulator.exe' /MongoPort=10251
Epilogue - おわりに
コマンドをメモしておきたかったので、書きましたー
その後、 Azure Cosmos DB Emulator を起動すると、無事に起動できました