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

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

相关推荐
青 春 记 忆6 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO36 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
Java王小怪7 小时前
Docker环境Redis没挂载保存数据
运维·docker·容器
Capricorn19887 小时前
解决全网抄 Karpathy 导致的 LLM Wiki 污染?基于知芽 Notebook Skill 的 raw/ 笔记法排障指南
大数据·论文阅读·人工智能·笔记·论文笔记
壹玖玖肆8 小时前
openGauss使用笔记
笔记
宵时待雨8 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
AKCJDJ9 小时前
k8s的管理及控制器管理
云原生·容器·kubernetes
灰阳阳9 小时前
Docker-数据卷命令解析
java·docker·eureka
SCandL1529 小时前
k8s service
linux·容器·kubernetes
噜~噜~噜~9 小时前
操作系统笔记-2.3.2.1 进程互斥的软件实现方法
笔记·操作系统