PostgreSQL Docker Error – 5432: 地址已被占用

PostgreSQL Docker Error -- 5432: 地址已被占用

今天在学习【Spring Boot + React】价值79.9美元,全栈开发,搭建个人网站、做毕业设计、试试这套课程第17~21节视频的时候,发现运行docker run --name demo-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres命令创建docker postgres数据库的容器报错,提示:docker: Error response from daemon: driver failed programming external connectivity on endpoint demo-postgres (e82e78bfe7108768b58298a8f90f50c9605bcadc4c2fca4aed21617a33b721a5): Bind for 0.0.0.0:5432 failed: port is already allocated.

说明5432端口被占用了,因为我本地Windows11系统之前安装过了Postgres数据库,占用了默认的5432端口

在本文中,我们将介绍在使用 PostgreSQL Docker 时可能遇到的错误:5432:地址已被占用。我们将探讨这个错误的原因以及如何解决它。首先,让我们了解一下 PostgreSQLDocker 的基本概念。

阅读更多:PostgreSQL 教程

PostgreSQL 简介

PostgreSQL 是一个强大的开源关系型数据库管理系统,具有可靠性、高性能和可扩展性。它支持大量的数据类型和功能,如 ACID 事务、多版本并发控制和完善的数据完整性检查。PostgreSQL 使用 SQL 语言进行数据管理和查询。它是业界认可的一个成熟数据库解决方案,并且在各种应用场景中得到广泛应用。

Docker 简介

Docker 是一个开源的容器化平台,它可以将应用程序及其依赖项打包为一个独立的容器。容器是一个完全自包含的运行环境,其中包含了应用程序运行所需的所有组件,包括操作系统、库文件和环境变量。使用 Docker,我们可以快速部署和管理应用程序,并保证应用程序在不同环境下的一致性。

PostgreSQL Docker Error -- 5432: 地址已被占用

在使用 PostgreSQL Docker 容器时,有时候会遇到一个常见的错误:5432:地址已被占用。这个错误通常是由于其他进程或容器已经占用了应用程序默认的 PostgreSQL 端口(5432)所导致的。当我们尝试启动 PostgreSQL 容器时,Docker 引擎会尝试监听端口 5432,但如果端口已经被占用,就会导致这个错误的发生。

如下图所示:

C:\Users\ccf19>docker run --name demo-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres

由于我本地安装了PostgresSql数据库,默认的5432端口被占用了,导致我执行docker run --name demo-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres创建docker容器时,使用5432端口创建容器,报错。

解决 PostgreSQL Docker 错误 -- 5432: 地址已被占用,有以下几种方式:

1. 检查已占用的端口

首先,我们可以使用 lsof 命令或 netstat 命令来检查哪个进程或容器占用了端口 5432。在终端中运行以下命令:

shell 复制代码
lsof -i :5432

netstat -tuln | grep 5432

如果是Windows下,可以输入如下命令:

netstat -ano |findstr :5432

这将显示占用端口 5432 的进程或容器的详细信息。根据该信息,您可以决定是停止该进程或容器,还是将 PostgreSQL Docker 容器绑定到另一个可用端口。

2. 修改 Docker 容器端口映射

如果您正在使用 docker run 命令启动 PostgreSQL Docker 容器,可以通过修改端口映射来解决该错误。在命令中添加 -p 参数并指定另一个可用端口,如下所示:

docker run -p <host-port>:5432 postgres

其中 <host-port> 是一个可用的主机端口,用于将主机上的请求转发到 PostgreSQL Docker 容器的端口 5432。通过修改端口映射,您可以避免端口冲突导致的错误。

我在看【Spring Boot + React】价值79.9美元,全栈开发,搭建个人网站、做毕业设计、试试这套课程的P18~P21章节的时候,使用Docker容器来部署配置Postgres数据库容器,但是创建容器的时候发现5432端口被我本地的Postgres数据库占用的,于是可以通过docker run --name demo-postgres -e POSTGRES_PASSWORD=password -p 5437:5432 -d postgres命令创建容器,将主机上的5437端口的请求转发到 PostgreSQL Docker 容器的端口 5432

3. 使用 Docker Compose

如果您使用 Docker Compose 来管理多个容器,并且 PostgreSQL 是其中之一,您可以在 docker-compose.yml 文件中修改 PostgreSQL 服务的端口映射。例如:

yaml 复制代码
services:
  postgres:
    ports:
      - <host-port>:5432

在 YAML 文件中,将 替换为一个可用的主机端口。当使用 docker-compose up 命令启动容器时,Docker Compose 将根据该配置进行端口映射,解决了可能的端口冲突问题。

总结

在本文中,我们介绍了在使用 PostgreSQL Docker 时可能遇到的错误:5432:地址已被占用。我们了解了 PostgreSQL 和 Docker 的基本概念,并探讨了解决这个错误的几种方法。希望本文能帮助您解决 PostgreSQL Docker 错误 -- 5432: 地址已被占用,并顺利地使用 PostgreSQL Docker 容器进行开发和部署。

参考资料

相关推荐
JH307321 分钟前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介22 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人24 分钟前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
武子康1 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
吴半杯2 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
今天我刷leetcode了吗2 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
路有瑶台2 小时前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
数字扫地僧2 小时前
WebLogic 版本升级的注意事项与流程
数据库
lwprain2 小时前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat