查看解决端口占用,以及docker解决端口占用的原理
在软件开发和部署过程中,端口占用是一个常见的问题。以下是查看和解决端口占用问题的完整解决方案:
一、查看端口占用情况
1. 在 Linux 系统中
方法一:使用 lsof
命令
sudo lsof -i:<端口号>
- 输出信息中会显示占用端口的进程名称、PID 和其他详细信息。
方法二:使用 netstat
命令
sudo netstat -tuln | grep <端口号>
- 参数说明:
-t
:显示 TCP 连接。-u
:显示 UDP 连接。-l
:显示监听状态的端口。-n
:显示数字形式的地址和端口。
方法三:使用 ss
命令
sudo ss -tuln | grep <端口号>
ss
是netstat
的替代工具,性能更高。
2. 在 Windows 系统中
方法一:使用 netstat
命令
netstat -ano | findstr :<端口号>
- 输出中的
PID
列表示占用端口的进程 ID。
方法二:通过任务管理器查看
- 打开任务管理器,切换到“详细信息”或“性能”选项卡。
- 在“资源监视器”中找到网络相关信息,查看端口和进程。
3. 在 Mac 系统中
方法一:使用 lsof
命令
sudo lsof -i:<端口号>
方法二:使用 netstat
命令
netstat -an | grep <端口号>
二、解决端口占用问题
1. 确认占用端口的进程
根据上一步获取的 PID
,找到进程的详细信息:
- Linux/Mac:
ps -p <PID>
- Windows:
tasklist /FI "PID eq <PID>"
2. 停止占用端口的进程
Linux/Mac
- 使用
kill
命令结束进程:sudo kill -9 <PID>
- 或者,使用服务管理工具停止进程:
sudo systemctl stop <服务名>
Windows
- 使用任务管理器:
- 打开任务管理器。
- 找到对应的进程,右键选择“结束任务”。
- 使用
taskkill
命令:taskkill /PID <PID> /F
3. 更改程序的端口号
- 修改配置文件或启动参数,指定程序使用其他未被占用的端口。
4. 临时释放端口(Linux/Mac)
有时进程可能没有完全释放端口,可以尝试:
sudo fuser -k <端口号>/tcp
5. 检查并避免端口占用的最佳实践
- 动态分配端口:使用随机端口而非固定端口。
- 启动前检查端口状态:在程序启动时,提前检查端口是否被占用。
- 使用容器化部署:通过 Docker 等工具隔离端口,减少冲突。
- 记录端口使用情况:在团队中统一记录端口使用分配。
三、使用Docker实现端口隔离
使用 Docker 可以实现端口隔离的原因,主要源于容器的虚拟化特性和网络命名空间机制。以下是详细解释:
1. 网络命名空间 (Network Namespace)
Docker 使用 Linux 的 Namespace(命名空间)技术,为每个容器创建独立的网络命名空间。这使得每个容器拥有自己的网络栈,包括:
- 独立的 IP 地址
- 独立的路由表
- 独立的端口号空间
具体表现
- 每个容器中的端口(例如 80 或 8080)仅在容器内部有效,与主机或其他容器不冲突。
- 通过 Docker 的端口映射机制(
-p
参数),容器端口可以绑定到主机端口,但这是显式的行为,而非默认暴露。
2. Docker 的端口映射机制
在默认的网络模式下(bridge 模式),Docker 不会直接暴露容器的端口到主机系统。需要通过端口映射将主机的端口显式绑定到容器的端口。
工作流程
- 容器启动时,Docker Daemon 会根据
-p
或-P
参数,设置主机和容器之间的端口转发规则。 - 通过
iptables
或类似机制,将主机端口的请求转发到容器的对应端口。 - 如果没有显式指定端口映射,容器内的端口对外界不可访问。
示例
- 启动一个容器,并映射端口:
docker run -d -p 8080:80 nginx
- 主机的 8080 端口映射到容器的 80 端口。
- 外部访问
http://host-ip:8080
会转发到容器的 80 端口。
- 如果没有
-p
参数,容器内的端口(如 80)无法通过主机直接访问。
3. 容器间的端口隔离
在默认的桥接网络模式下,每个容器的网络环境是隔离的:
- 容器 A 的端口号不会与容器 B 冲突。
- 容器之间不能直接访问对方的端口,除非使用 Docker 网络或链接功能显式配置连接。
4. Docker 网络模式对隔离的影响
Docker 提供多种网络模式,不同模式对端口隔离的影响有所不同:
- Bridge 模式(默认):容器之间隔离,主机和容器之间需通过端口映射访问。
- Host 模式:
- 容器直接使用主机的网络栈,没有端口隔离。
- 容器内运行的服务与主机上的服务可能产生端口冲突。
- None 模式:
- 容器没有网络栈,完全隔离,不与外界通信。
- Custom Network(自定义网络):
- 可以将多个容器加入同一个网络,允许它们通过容器名直接通信,但仍然保持与主机的端口隔离。
5. 为什么使用 Docker 可以实现端口隔离?
- 每个容器运行在独立的网络命名空间。
- 默认情况下,容器的端口不会自动暴露到主机,只有通过显式映射才能访问。
- 容器之间的端口也彼此独立,即使使用相同的端口号也不会冲突。
总结
Docker 的端口隔离得益于网络命名空间技术和端口映射机制,使得每个容器的端口独立于主机和其他容器。这种隔离性不仅减少了端口冲突的风险,还提高了系统的安全性和灵活性。
相关文章:
查看解决端口占用,以及docker解决端口占用的原理
在软件开发和部署过程中,端口占用是一个常见的问题。以下是查看和解决端口占用问题的完整解决方案: 一、查看端口占用情况 1. 在 Linux 系统中 方法一:使用 lsof 命令 sudo lsof -i:<端口号>输出信息中会显示占用端口的进程名称、PI…...

力扣-Hot100-链表其一【算法学习day.34】
前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...

centos7 升级openssl 与升级openssh 安装卸载 telnet-server
前言: 服务器被安全扫描,扫出了漏洞需要修复,根据提示将openssh升级为9.8p1的版本,同时需要升级openssl,但是升级openssh可能会导致ssh连接失败,从而无法继续操作,特别是远程机房尤为危险&#…...
C++知识点总结(57):STL综合
STL综合 一、数据结构1. 队列2. 映射 二、队列例题1. 约瑟夫环(数据加强)2. 打印队列3. 小组队列4. 日志统计 2.0 三、映射真题1. 眼红的 Medusa2. 美食评委 一、数据结构 1. 队列 功能代码定义queue<tp>q入队.push(x)出队.pop()队头.front()队尾…...

mac2019环境 Airflow+hive+spark+hadoop本地环境安装
1 环境介绍 本地安装可分为两个部分,mac软件环境, python开发环境 ps: 安装过程参考chatgpt、csdn文章 1.1 mac软件环境 目标安装的的软件是hive、apache-spark、hadoop,但是这三个软件又依赖java(spark依赖)、ssh(…...

如何使用EasyExcel生成多列表组合填充的复杂Excel示例
作者:Funky_oaNiu 一、(需求)生成的表格效果:二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、(需求)生成的表格效果: 其中只有顶部…...

【MySQL】MySQL在Centos环境安装
🔥个人主页: Forcible Bug Maker 🔥专栏: MySQL 目录 🌈前言🔥卸载不要的环境🔥检查系统安装包🔥卸载这些默认安装包🔥获取mysql官方yum源🔥安装mysql yum源…...

JDBC-Mysql 时区问题详解
目录 一、前置准备 1.1 版本号列表 1.2 Sql脚本 1.3 application.yaml配置 1.4 数据库时区设置 二、java Date类型与(jdbcType)TIMESTAMP类型的转换 2.1 jdbc对serverTimeZone的处理 2.2 java Date转(jdbcType)TIMESTAMP …...

前端页面一些小点
案例一: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>快递单号查询</title><…...

Postman接口测试(断言、关联、参数化、输出测试报告)
基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖:一个http请求的响应结果中的数据,被另一个请求使用 登…...
redis和mongodb等对比分析
Redis 和 MongoDB 都是非常流行的 NoSQL 数据库,它们在数据存储模型、性能、扩展性等方面有很大的差异。下面是 Redis 和 MongoDB 的对比分析: 1. 数据模型 Redis: 键值存储:Redis 是一个内存数据结构存储,它支持多种数据类型,如字符串、哈希、列表、集合、有序集合等。…...

如何在 WordPress 中轻松强制所有用户退出登录
作为一名长期管理 WordPress 网站的站长,我深知维护网站安全性的重要性。尤其是在面对会员网站或付费内容平台时,确保所有用户的登录状态是最新的,是维持网站正常运营的关键之一。今天,我就分享一下如何通过简单的步骤,…...

移除元素(leetcode 27)
给定一个数组,在数组中删除等于这个目标值的元素,然后返回新数组的大小 数组理论: 数组是一个连续的类型相近的元素的一个集合,数组上的删除是覆盖,只能由后面的元素进行覆盖,而不能进行真正意义上的地理位…...
html5表单属性的用法
文章目录 HTML5表单详解与代码案例一、表单的基本结构二、表单元素及其属性三、表单的高级应用与验证四、表单布局与样式 HTML5表单详解与代码案例 HTML5表单是网页中用于收集用户输入并提交到服务器的重要元素,广泛应用于登录页面、客户留言、搜索产品等场景。本文…...

使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan
使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan 背景 在使用Ant Design Vue 开发数据表格时,我们常常会遇到需要合并单元格的需求。 比如,某些字段的值可能会在多行中重复出现,而我们希望将这些重复的单元格合并为…...
相机光学(四十四)——ALL-PD和PDAF
1.PDAF(Phase Detection Auto Focus) PDAF是相位检测自动对焦技术的缩写,它是一种在数码相机和智能手机摄像头中使用的自动对焦技术。 PDAF的原理是根据CIS(CMOS图像传感器)不同像素的相位差信息,判断出…...

Opengl光照测试
代码 #include "Model.h" #include "shader_m.h" #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" //以上是放在同目录的头文件#include <glad/glad.h> #include <GLFW/glfw3.…...
OpenSIP2.4.11 向 FreeSWITCH 注册
应朋友要求做了个简单的测试,花费时间不过半小时,记录如下: OpenSIPS IP 地址:192.168.31.213 FreeSWITCH IP 地址:192.168.31.166 加载 uac_registrant 模块(这个模块依赖 uac_auth 模块,得…...

【C++】深入理解 C++ 优先级队列、容器适配器与 deque:实现与应用解析
个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 前言📌 1. 优先级队列、容器适配器和 deque 概述✨1.1 什么是优…...
Android 开发与救砖工具介绍
Android 开发与救砖工具介绍 在 Android 开发和设备维护中,fastboot、adb 和 9008 模式是三个非常重要的工具和模式。它们各自有不同的用途和操作方式,对于开发者和技术支持人员来说,了解它们的功能和使用方法是必不可少的。 1. Fastboot …...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...