解决docker服务端口占用问题,bind:Address already in use

背景

在调试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服务就不会报错了。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "bind: address already in use" 意思是绑定的地址已经被使用。这通常是因为另一个程序已经在使用该地址进行通信。请确保没有其他程序正在使用该地址,或者更换一个不同的地址再试。 ### 回答2: “bind: address already in use” 是一个常见的错误提示,出现在网络编程或者服务端运行时。其意思很明显,就是在绑定套接字时,地址已经被占用了。 套接字是通信过程中一个重要的概念,用于传输数据和建立连接。当我们把一个地址绑定到套接字上时,之后该地址就不能被其他套接字使用,否则就会出现 "bind: address already in use" 的错误信息。 出现这种情况有很多原因,下面介绍一些可能的解决方法: 1. 检查端是否被占用:通常一个地址由IP和端两部分组成,如果端被其他程序占用,则该地址也不能被再次使用。在Linux系统下,可以通过 netstat 或者 lsof 命令来查看当前端的使用情况。如果发现被占用,则需要释放该端,或者重新选择一个没有被占用的端绑定。 2. 检查程序是否正常退出:如果前一次程序没有正常退出,可能导致套接字没有释放,导致后续程序不能使用同样的地址绑定。此时可以使用 kill 或者 pkill 命令强制杀掉进程,然后重新启动程序。 3. 延迟绑定套接字:在某些情况下,我们需要使用动态端进行套接字通信,此时可以使用SO_REUSEADDR 选项来解决 "bind: address already in use" 的问题。该选项可以允许延迟绑定套接字,让它在程序下次启动时被重新绑定。 以上是常见的几种解决方法,如果还不能解决该错误,那么可能是由于其他更加复杂的原因导致的。在这种情况下,可以参考操作系统或者网络编程的相关文献,或者向线上论坛或社区寻求帮助。 ### 回答3: bind: address already in use 这个错误通常发生在绑定网络端时。它的意思是该地址已经被占用而无法再次使用。 引起这个错误的原因可能是其他进程已经在使用该端,使用了相同的 IP 地址和端号组合。此时,如果想要绑定该端,就需要先关闭占用的进程,或者为要绑定的地址选用一个不同的端号。 另一种可能导致这个错误的原因是绑定地址过程中未正确释放资源。比如,在某个程序中绑定了一个端,但是程序退出后没有释放端资源,导致再次启动程序时出现该错误。解决这个问题的方法是杀死占用该端的进程或者等待一段时间,直到该进程自动退出并释放端资源。 此外,如果使用了 IPv6 地址,还需要确认网络接是否使能了 IPv6,是否配置正确,以及是否开启了重复地址检测等功能。如果有多个网络接,在绑定地址时还需指定使用的接。 总之,如果遇到 bind: address already in use 错误,需要仔细检查端和 IP 地址的使用情况,确认是否有其它程序占用了该端,或者是否存在资源泄露的情况。只有找到问题所在并进行相应处理,才能避免类似的错误再次发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值