背景

在调试rpc和api服务的代码时,启动服务就出现bind:Address already in use的问题,意思是端口被占用了,在尝试了许多方法后终于解决,现总结如下。

解决方案

kill掉占用端口的进程

执行以下代码查看端口占用情况

netstat -ntlp

在这里插入图片描述
定位到端口的pid值,例如我需要的端口号是9001,则对应pid为3197
然后,执行代码kill掉该进程

kill -9 3197

然后重启服务即可。
一般来说,到这里端口占用的问题就可以解决了,然而我在启动rpc服务时仍然报错。。

问题定位

经过排查,我在docker容器中执行了api和rpc的服务代码,但由于连接超时导致服务未关闭,才造成了端口的占用。执行代码可以查看docker容器的识别号:

docker ps

在这里插入图片描述
然后执行以下代码查看该容器内的进程,比如这个容器的识别号是f5f7ab7cbdd6

docker top f5f7ab7cbdd6

在这里插入图片描述
可以看到,之前启动的rpc和api服务仍在运行,因此需要把它们kill掉
注意:需要把相关的进程都kill掉,比如上图需要kill掉的进程是30904,31090,31009和31197,最后呈现下面的画面
在这里插入图片描述
这样,再重新启动rpc和api服务就不会报错了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐