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 有端口转发中间层

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

相关推荐
凉、介15 分钟前
深入理解 ARMv8-A|处理器模式与寄存器
笔记·学习·嵌入式·arm
whyTeaFo1 小时前
MIT 6.1810: Lec 5: calling conventions and stack frames RISC-V
笔记
宇明一不急2 小时前
k8s HPA storageclass configmap
云原生·容器·kubernetes
上课不要睡觉了2 小时前
【统计法规】4.1统计管理体制概述
笔记·统计师考试
墨白曦煜2 小时前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)
笔记·算法
Upsy-Daisy3 小时前
IOTA 学习笔记(四):当前 IOTA 架构总览
笔记·学习·架构
山楂树の3 小时前
JS中??和||的区别
笔记
U盘失踪了4 小时前
Browser Use — AI驱动浏览器自动化的全新范式
笔记·自动化
疯狂打码的少年4 小时前
Cache的三种映射方式(直接/全相联/组相联)
linux·服务器·数据库·笔记
ZzzZZzzzZZZzzzz…4 小时前
Docker + K8s集群搭建实战:1 Master+2 Node,含Harbor私有仓库与软路由
docker·云原生·容器·kubernetes·容器编排·集群部署·cri-dockerd