“Bind error:Address already in use” 错误的解决办法

在服务端bind or listen前

unsigned int value = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(void *)&value,sizeof(value));

另外参见:

http://bbs.csdn.net/topics/330034966

http://blog.csdn.net/hairetz/article/details/4083389

做Oracle服务器程序时,如果程序退出时出现这样的错误,用上面的方法不管用,两种解决办法:

  1. 在SQL*Plus提示符下执行 shutdown immediate 命令断开所有用户连接并关闭数据库。

SQL> shutdown immediate

再启动数据库,如果失败,就用 shutdown abort 命令关闭一次前面的实例。

SQL> shutdown abort

然后再启动数据库。

  1. 用kill命令杀掉占用这个端口的进程。
    lsof -i:端口号
    kill -9 pid

找出占用这个端口的进程,然后,用root用户登录,用kill命令杀掉这个进程。假设这个端口是2013,用 “netstat -tanlp” 查找,如下:

[oracle@localhost]$ netstat -tanlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:39369 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:2013 0.0.0.0:* LISTEN 3890/oracleserver

2013端口被占用,进程名是oracleserver

————————————————
版权声明:本文为CSDN博主「iw1210」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iw1210/article/details/8676747

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,由于指定的TCP4绑定地址0.0.0.0:3306已经在使用中,因此无法启动Userland Proxy。 很抱歉,我不太清楚这个问题,但是建议您可以尝试重启服务器,以确保该端口没有被其他程序占用。这个错误提示意味着在启动 userland proxy 时出现了问题。更具体地说,它指出在尝试将代理绑定到本地 TCP 端口 3306 时发生了错误,因为该端口已经被占用了。 这通常是由于另一个进程已经在使用该端口。要解决这个问题,您需要找出哪个进程正在占用端口 3306 并停止它,或者将代理绑定到另一个可用端口。可以使用命令行工具如 `lsof` 或 `netstat` 来查找正在运行的进程和它们正在使用的端口。例如,以下命令将显示所有正在使用端口 3306 的进程: ``` sudo lsof -i :3306 ``` 然后,您可以通过终止正在运行的进程来释放该端口,或者将代理绑定到另一个可用端口。 希望这可以帮助您解决问题! ### 回答2: 在阅读此错误信息之前,我们需要了解几个概念。首先,Docker是一种容器化技术,它可以让开发人员在不同的环境中运行应用程序。其次,代理是指代表另一端系统或服务的中介,用户可以通过代理来访问它。最后,3306是MySQL数据库的默认端口号。 现在回到错误信息:error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use。这个错误意味着Docker无法启动MySQL服务的代理,因为这些服务已经在使用TCP端口3306。当Docker尝试使用该端口时,操作系统将拒绝请求。这通常是因为之前启动了MySQL服务并将其绑定到此端口,但未关闭该服务,从而导致该端口持续占用。 要解决此问题,首先需要找到占用端口的进程,并将其关闭。可以通过在命令行中运行“sudo lsof -i :3306”命令来查看使用该端口的进程。返回一个包含进程ID的结果,可以使用“kill -9 [PID]”命令来关闭该进程。 在确认端口处于空闲状态后,Docker应该能够成功启动MySQL服务的代理。如果问题仍然存在,则可以尝试更改MySQL服务的端口,以便Docker可以使用该端口。可以在MySQL配置文件中更改端口号,并启动服务以应用更改。 总之,这个错误提示是因为Docker无法使用MySQL服务的默认端口,因为它正在被其他应用程序占用。必须通过关闭占用该端口的进程或更改MySQL服务的端口来解决此问题。 ### 回答3: 这个错误信息出现在启动 Docker 容器时,通常是因为该容器尝试监听端口时发现该端口已经被占用了。具体来说,这里的端口是3306,是 MySQL 数据库的默认端口。 出现这个错误可能有以下几种原因: 1. 有其他进程或容器已经在使用该端口。在启动容器之前,您需要使用命令 lsof -i:3306 找到正在使用该端口的进程,然后通过结束该进程或停止其他 Docker 容器来释放该端口。 2. 容器内的 MySQL 进程正在占用该端口。有时候在停止 MySQL 容器时,MySQL 进程仍然在后台运行。您需要使用命令 docker ps -a 查找该容器,然后使用 docker stop 命令停止它。如果没有办法停止该容器,请尝试使用 docker kill 命令强制终止该容器。 3. 容器没有正确绑定端口。在使用 Docker 启动容器时,您需要将容器内部的端口映射到主机上的端口。比如本例中,您需要使用参数 -p 3306:3306 来将容器内部的 MySQL 端口(3306)映射到主机上的端口(也是3306)。如果您没有正确绑定端口,Docker 将无法为该容器分配端口并启动它。 建议您可以按照以上三种情况逐个排查,找到问题所在并解决它。如果您仍然无法解决问题,请尝试清除 Docker 的缓存并重新启动 Docker 服务,有时候这样可以解决一些奇怪的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值