📌  相关文章
📜  docker:来自守护进程的错误响应:端口不可用:listen tcp 0.0.0.0:3306:bind:每个套接字地址(协议网络地址端口)通常只允许使用一次. - 打字稿(1)

📅  最后修改于: 2023-12-03 15:00:31.193000             🧑  作者: Mango

错误响应:端口不可用

如果你使用docker来部署你的应用程序,你可能会遇到端口不可用的错误响应。该错误消息通常表明一个进程正在使用该端口,所以你的应用程序无法绑定到该端口上。

以下是一个完整的错误响应示例:

docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use.

这意味着端口3306已经被另一个应用程序占用了,因此你的docker容器无法使用它。为了解决这个问题,你需要弄清楚哪个进程在使用该端口,并停止该进程或将其重新配置为使用其他端口。

确定哪个进程在使用该端口

你可以通过下面的命令,使用lsof来列出正在使用该端口的进程:

sudo lsof -i :3306

该命令会输出正在使用端口3306的进程的详细信息。例如:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld   123 mysql  10u  IPv4  12345      0t0  TCP *:mysql (LISTEN)

在以上例子中,进程名称为mysqld,PID为123,正在使用TCP协议的mysql端口。

停止占用端口的进程

一旦你确定了占用端口的进程,你可以停止它并释放该端口。在以上例子中,你可以使用以下命令来停止mysqld进程:

sudo kill -9 123

在你停止了该进程之后,你的docker容器应该能够成功绑定到指定的端口上。

不过,在实际部署过程中,我们经常需要占用多个端口作为服务的入口,如果经常遇到端口冲突问题,建议使用docker-compose进行协同部署,使用端口映射规则以避免端口冲突问题的出现。