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

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

相关推荐
xzal122 小时前
python中,turtle基础知识笔记1
笔记·python·turtle
Eric.Lee20213 小时前
docker 启动停止命令
运维·docker·容器
鱼鳞_4 小时前
Java学习笔记_Day29(异常)
java·笔记·学习
九成宫5 小时前
IT项目管理期末复习——Chapter 8 项目质量管理
笔记·项目管理·软件工程
Flittly5 小时前
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
java·笔记·安全·spring·springboot
苏渡苇5 小时前
5 分钟跑起 Redis(Docker 版)
数据库·redis·缓存·docker·redis入门
Stella Blog6 小时前
狂神Java基础学习笔记Day04
java·笔记·学习
一只机电自动化菜鸟6 小时前
一建机电备考笔记(17) 常用设备—通用设备1(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
bekote6 小时前
笔记|数据库
数据库·笔记
深蓝海拓6 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十)框架初成的阶段总结
网络·笔记·python·学习·ui·plc