Docker使用笔记

问题:

我在window是环境下 宿主机安装了postgres 16,启动后并成功创建链接,

然后用docker 部署了 posgres18 ,启动后,指定端口 5432:5432. 也启动成功了。

通过navicat 链接 localhost:5432服务,

连接到了postgres16. 关闭 postgres16 服务后,

再次链接链接到了 postgres18 .这是为什么两个服务用一个端口还不冲突?

回答:

这是一个非常典型、而且很多人在 Windows + Docker + PostgreSQL 场景下都会困惑的问题 。

结论先行,然后我用端口、网络、进程层面给你一次性讲清楚

一句话结论(核心原因)

Docker 容器里的 PostgreSQL 并不是直接占用 5432 端口的
真正占用 5432 的只有一个进程:要么是宿主机的 Postgres,要么是 Docker Desktop 的端口转发代理

所以你看到的现象是:

  • 宿主机 Postgres 16 运行时 → 它抢占 5432

  • Docker Postgres 18 运行着,但 5432 转发被"挡住"

  • 你连 localhost:5432 → 实际连的是 宿主机 Postgres 16

  • 关掉宿主机 Postgres 16 → 5432 空出来

  • Docker 的端口映射立即生效 → 你连到了 容器里的 Postgres 18

工程级总结(重点)

  • 端口 不可能 真正被两个进程同时监听

  • Docker 容器并不直接监听宿主端口

  • Windows Docker Desktop 有端口转发中间层

  • 你看到的是端口归属切换,不是共存

相关推荐
qq_284274052 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274053 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan20244 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
sbjdhjd4 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人4 小时前
1、什么是K8s
云原生·容器·kubernetes
深圳老胡5 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
坤坤子吖5 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
乐橙开放平台6 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居
零基础1236 小时前
FinalShell 使用教程:从安装到高效运维
运维·经验分享·笔记·finalshell
帷幕落秋6 小时前
Docker的两种安装
运维·docker·容器