Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Docker报port is already allocated错误

Linux中Docker遇到报port is already allocated错误

作者:IT后浪

在Linux系统中,如果尝试绑定一个网络服务到一个已经被其他进程使用的端口上,你会遇到“port is already allocated”错误,这意味着该端口已经被另一个进程占用,因此无法再次被分配给任何新的服务

在Linux系统中,当你运行Docker容器或其他服务时,如果遇到port is already allocated错误,,这意味着该端口已经被另一个进程占用,因此无法再次被分配给任何新的服务。

解决此类问题,通常可以采用下面步骤操作

找出哪个进程占用了端口

方式一:lsof命令

lsof -i :<port_number>

这个命令会列出所有绑定到指定端口 <port_number> 的进程。输出结果中,PID列显示的就是对应进程的ID。

注意:冒号【:】后面不要带空格;否则会出现unacceptable port specification in的错误提示。

方式二:netstat命令

netstat -tulpn | grep :<port_number>

这个命令将展示所有TCP连接以及监听中的UDP端口,并通过管道配合 grep 过滤出指定端口号的行。在输出信息中,可以看到对应的PID/Program name

方式三:ss命令

ss -plnt | grep :<port_number>

ss 是一个用来分析 socket 统计信息的工具,它提供了比 netstat 更高效更详细的输出。

停止占用端口的进程

找到占用端口的PID(进程ID),然后使用kill命令结束该进程

kill <pid>

如果是Docker容器占用

如果发现是某个Docker容器占用了端口,可以先列出所有正在运行的容器,并查找与问题端口相关的容器:

显示当前正在运行的容器

docker ps

显示所有状态的容器

docker ps -a

Docker容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。

显示所有正在运行容器及其端口映射

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}"

停止并移除容器

docker stop <container_id_or_name>
docker rm <container_id_or_name>

重新映射端口

如果你需要同时运行多个服务且它们都希望使用相同的端口,你可以为新的Docker容器映射不同的主机端口

docker run -p <new_host_port>:<container_port> ...

为什么不直接kill掉Docker占用端口进程

在Docker容器中,如果你知道某个进程的PID,并且想要结束该进程,理论上你可以使用 kill pid 命令来终止它。但是通常并不推荐,这是因为:

总结

到此这篇关于Linux系统中遇到报port is already allocated错误的文章就介绍到这了,更多相关Docker报port is already allocated错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文