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

 更新时间:2024年06月29日 15:00:04   作者: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 命令来终止它。但是通常并不推荐,这是因为:

  • 隔离性: Docker 容器内部运行的所有进程都在一个独立的命名空间内,这意味着宿主机上的直接 PID 可能与容器内部的 PID 不一致。你需要首先通过 docker exec 进入容器环境,然后获取并使用容器内的 PID 执行命令。
  • 容器管理: 正常情况下,应该通过 Docker 提供的接口来管理容器及其内部服务。比如,使用 docker stop 或 docker kill 来停止或强制停止整个容器,这将确保容器按照预期的方式关闭所有服务和资源。
  • 服务稳定性: 如果直接杀掉容器中的某个进程,而不考虑容器的整体状态和服务依赖关系,可能会导致容器内部的服务状态异常、数据丢失或其他未预见的问题。
  • 服务重启策略: 在很多场景下,Docker 容器会配置为自动重启失败的服务,而直接在容器内部杀死进程可能违反了这种重启策略,使得容器无法正常恢复到期望状态。

总结

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

相关文章

  • 详解Linux用户态与内核态通信的几种方式

    详解Linux用户态与内核态通信的几种方式

    这篇文章主要介绍了详解Linux用户态与内核态通信的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Apache中配置支持CORS(跨域资源共享)实例

    Apache中配置支持CORS(跨域资源共享)实例

    这篇文章主要介绍了Apache中配置支持CORS(跨域资源共享)实例,本文给出了一个完整的apache、PHP、JavaScript结合实现的跨域资源共享实例,需要的朋友可以参考下
    2015-01-01
  • Linux od命令详细介绍及用法实例

    Linux od命令详细介绍及用法实例

    这篇文章主要介绍了Linux od命令详细介绍及用法实例的相关资料,这里对Linux od命令的格式,命令选项及用法一一介绍详解,需要的朋友可以参考下
    2017-01-01
  • 安装Linux的flash的步骤方法

    安装Linux的flash的步骤方法

    在本篇文章里小编给各位分享的是关于安装Linux的flash的步骤方法,对此有需要的朋友们可以学习下。
    2020-03-03
  • Linux查看log日志常用命令

    Linux查看log日志常用命令

    Linux日志存储在/var/log目录中,我们可以编写脚本,来扫描这些日志,并基于它们的内容去自动执行某些功能,Linux查看日志的命令有多种: tail、head、cat、more、less、sed等
    2024-06-06
  • 详解centos7虚拟机安装elasticsearch5.0.x-安装篇

    详解centos7虚拟机安装elasticsearch5.0.x-安装篇

    本篇文章主要介绍了centos7虚拟机安装elasticsearch5.0.x-安装篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Linux利用lsof/extundelete工具恢复误删除的文件或目录

    Linux利用lsof/extundelete工具恢复误删除的文件或目录

    这篇文章主要给大家介绍了关于Linux利用lsof/extundelete工具恢复误删除的文件或目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Linux后台运行Python程序的几种方法讲解

    Linux后台运行Python程序的几种方法讲解

    今天小编就为大家分享一篇关于Linux后台运行Python程序的几种方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • linux下make命令实现输出高亮的方法

    linux下make命令实现输出高亮的方法

    Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。这篇文章主要给大家介绍了关于linux下make命令实现输出高亮的方法,需要的朋友可以参考下。
    2017-07-07
  • LINUX重启MYSQL的命令详解

    LINUX重启MYSQL的命令详解

    下面小编就为大家带来一篇LINUX重启MYSQL的命令详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10

最新评论