Windows环境安装PostgreSQL

发布时间 2023-11-18 16:21:56作者: 時光心向阳

Windows环境安装PostgreSQL

安装步骤

要在Docker Desktop上安装PostgreSQL数据库,请按照以下步骤进行操作:

  1. 首先,确保您已经安装了Docker Desktop,并且它正在运行。

  2. 打开终端或命令提示符,并输入以下命令来从Docker Hub下载并运行PostgreSQL镜像:

    docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
    

    这将在Docker容器中运行一个名为"my-postgres"的PostgreSQL实例。您可以根据需要更改容器名称和密码。

  3. 等待一段时间,直到容器成功启动。您可以使用以下命令检查容器的状态:

    docker ps
    

    如果容器正在运行,您将看到一个包含PostgreSQL容器的条目。

  4. 现在,您可以使用任何支持PostgreSQL的客户端工具连接到数据库。例如,您可以使用psql命令行工具连接到容器中的数据库:

    使用完整的路径来运行 psql 命令:如果您知道 PostgreSQL 客户端工具的安装路径,可以直接使用完整的路径来运行 psql 命令。例如,在 Windows 上,您可以尝试运行以下命令:

    "C:\Program Files\PostgreSQL\<version>\bin\psql" -h localhost -p 5432 -U postgres
    

    请确保将 <version> 替换为您安装的 PostgreSQL 版本号。

    psql -h localhost -p 5432 -U postgres
    

    或者

    docker exec -it <container_id> psql -U postgres
    

    <container_id> 替换为您的 PostgreSQL 容器的 ID 或名称。

    输入密码时,请使用在第2步中设置的密码。

  5. 您已成功在Docker Desktop上安装和运行了PostgreSQL数据库。现在,您可以使用该数据库进行开发和测试。

常见错误

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5432 -> 0.0.0.0:0: listen tcp 0.0.0.0:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

这个错误提示表明端口 5432 在您的系统上已被占用,因此 Docker 无法将容器的端口映射到主机上。要解决此问题,您可以尝试以下几种方法:

  1. 检查端口占用情况:运行以下命令以查看系统上当前正在使用的端口:

    netstat -ano | findstr :5432
    

    如果该端口已被占用,您将看到相关的进程ID(PID)。请记下该PID。

  2. 停止占用端口的进程:使用以下命令停止占用端口的进程(将 <PID> 替换为在上一步中找到的进程ID):

    • 在 Windows 上:

      taskkill /PID <PID> /F
      
    • 在 macOS 或 Linux 上:

      kill <PID>
      

    请注意,停止进程可能会影响正在运行的其他应用程序,请谨慎操作。

  3. 更改映射的端口:如果您不想停止占用端口的进程,您可以尝试将容器中的端口映射到主机上的其他可用端口。例如,您可以将 -p 5432:5432 修改为 -p 5433:5432,将容器的端口 5432 映射到主机的端口 5433。

    docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5433:5432 -d postgres
    

    这样做后,您可以使用主机上的端口 5433 来连接到 PostgreSQL 数据库。

请注意,以上方法可能需要管理员权限或超级用户权限(如在 macOS 或 Linux 上使用 sudo 命令)。如果问题仍然存在,请确保您的系统配置正确,并确保没有其他程序正在占用该端口。

如果端口未被占用仍然有以上提示,可以尝试在cmd终端以管理员身份执行以下命令

net stop winnat

# 然后运行docker

net start winnat