发布于 2026-01-06 0 阅读
0

如何在 Docker 上运行 PostgreSQL 和 pgAdmin?

如何在 Docker 上运行 PostgreSQL 和 pgAdmin?

目录:


先决条件

从这里安装适用于您计算机的所有 Docker 工具


设置 Docker 网络

我们将把 PostgreSQL 和 pgAdmin 安装在不同的容器中。
为了使这两个容器能够相互通信,它们需要位于同一个 Docker 网络中。

  1. 在终端中使用以下命令创建 Docker 网络:

    docker network create my-network
    
  2. 此命令使用以下选项创建一个新的 Docker 网络:

    • create my-network:将网络名称设置为“my-network”,但也可以将其设置为任何您喜欢的名称。


设置 PostgreSQL 容器

这里涉及两个步骤。请在终端上执行以下操作。

  1. 使用以下命令从Docker Hub 仓库拉取最新的 PostgreSQL Docker 镜像:

    docker pull postgres
    
  2. 等待镜像下载完成。Docker 会自动下载必要的层和依赖项。

  3. 使用以下命令基于刚刚拉取的镜像创建并运行一个新容器:

    docker run --name my-postgres -e POSTGRES_PASSWORD=password -network my-network -d -p 5432:5432 postgres
    
  4. 上述命令使用以下选项启动一个新的 PostgreSQL 容器:

    • --name my-postgres: 将容器名称设置为“my-postgres”,我们可以将其设置为我们喜欢的任何名称。
    • -e POSTGRES_PASSWORD=password:将默认“postgres”用户的密码设置为“password”。
    • -network my-network将 Docker 网络连接到“my-network”,这是我们之前创建的网络。
    • -d:以分离模式(在后台)运行容器。
    • -p 5432:5432:将容器的端口 5432 映射到主机的端口 5432,允许从容器外部访问 PostgreSQL 服务器。
    • postgres: 指定用于创建容器的 Docker 镜像;在我们的例子中,它是我们在步骤 1中从 Docker Hub 拉取的镜像。


设置 pgAdmin 容器

这也包括两个步骤。

  1. 使用以下命令从Docker Hub 仓库拉取 pgAdmin 4 的官方 Docker 发行版:

    docker pull dpage/pgadmin4
    
  2. 等待镜像下载完成。Docker 会自动下载必要的层和依赖项。

  3. 使用以下命令基于刚刚拉取的镜像创建并运行一个新容器:

    docker run --name my-pgadmin -p 80:80 -v /path/to/local/directory:/var/lib/pgadmin -e PGADMIN_DEFAULT_EMAIL=your_email@example.com -e PGADMIN_DEFAULT_PASSWORD=your_password --network my-network -d dpage/pgadmin4
    
  4. 上述命令使用以下选项启动一个新的 PostgreSQL 容器:

    • --name my-pgadmin:将容器名称设置为“my-pgadmin”,我们可以将其设置为我们喜欢的任何名称。
    • -p 80:80将容器的 80 端口映射到主机的 80 端口。这样就可以通过 Web 浏览器访问 pgAdmin。
    • -v /path/to/local/directory:/var/lib/pgadmin:将主机上的本地目录(/path/to/local/directory)挂载到容器内的 /var/lib/pgadmin 目录。请将 /path/to/local/directory 替换为主机上您希望存储 pgAdmin 数据的实际路径。通过挂载卷,pgAdmin 数据将持久化到容器外部的主机上。即使您停止并移除容器,指定的本地目录中的数据仍将保持不变。
    • -e PGADMIN_DEFAULT_EMAIL=your_email@example.com设置用于登录 pgAdmin 的默认电子邮件地址。请将your_email@example.com替换为您想要的电子邮件地址。
    • -e PGADMIN_DEFAULT_PASSWORD=your_password设置 pgAdmin 的默认登录密码。请将 your_password 替换为您所需的密码。
    • -network my-network将 Docker 网络连接到“my-network”,这是我们之前创建的网络。
    • -d:以分离模式运行容器,这意味着它在后台运行。
    • dpage/pgadmin4:指定用于创建容器的 Docker 镜像。


在容器化的 PostgreSQL 上创建新数据库

现在 PostgreSQL 容器已经设置并运行,让我们在其服务器上创建一个新的数据库。

  1. 请确保 PostgreSQL 容器正在运行:

    • 打开终端或命令提示符。
    • 运行以下命令列出正在运行的 Docker 容器,然后验证您的 PostgreSQL 容器是否已列出且状态为“正在运行”:
    docker ps
    
  2. 使用以下命令在 PostgreSQL 容器内打开一个 shell:

    • 替换为 PostgreSQL 容器的实际名称或 ID(在本例中为 my-postgres)。
    • 此命令会在容器内打开一个交互式 shell 会话。
    docker exec -it <container_name_or_id> bash
    
  3. 在容器的 shell 中,使用 psql 命令连接到 PostgreSQL 数据库,命令如下:

    psql -U postgres
    
  4. 接下来,使用以下 SQL 命令创建一个新数据库:

    • 替换为新数据库所需的名称
    CREATE DATABASE <database_name>;
    


在容器化的 pgAdmin 上访问新数据库

  1. 请确保 pgAdmin 容器正在运行:

    • 打开终端或命令提示符。
    • 运行以下命令列出正在运行的 Docker 容器,并验证 pgAdmin 容器是否已列出并正在运行。
    docker ps
    
  2. 在网页浏览器中访问http://localhost并输入设置过程中使用的用户名和密码

  3. 在 pgAdmin 中,使用以下详细信息创建一个新的服务器连接:

    • Host name/address: my-postgres(PostgreSQL 容器的名称)
    • Port:5432(容器内PostgreSQL的默认端口)
    • Username: postgres(PostgreSQL 的默认用户名)
    • Password运行 PostgreSQL 容器时指定的密码
  4. 现在你应该能够使用指定的服务器连接,从 pgAdmin 容器连接到 PostgreSQL 容器。两个容器都通过“my-network”网络进行通信。


尖端

  1. 如果本地已经运行了 PostgreSQL,那么它很可能已经配置为在默认端口 5432 上运行。

    • 为防止冲突,请将 PostgreSQL 容器映射到不同的端口。
    • 在下面的示例中,PostgreSQL 容器内部仍然使用 5432 端口,但它在主机上映射到 5433 端口。
    docker run --name my-postgres -e POSTGRES_PASSWORD=password -network my-network -d -p 5433:5432 postgres
    
  2. 与其通过http://localhost访问 pgAdmin ,我们可以将其映射到特定的 URL,例如http://local.pgadmin,以便更方便地访问。

    • 我们通过在主机上使用像 Nginx 这样的反向代理服务器来实现这一点。我以后会专门写一篇文章来介绍这方面的内容。
  3. 如果我们需要从代码中以编程方式访问容器化数据库该怎么办?

    • 这里没有任何变化,我们访问它的方式与访问本地数据库的方式相同,例如:
    postgres://postgres:password@localhost:5433/<the_containerized_database_name>?sslmode=prefer
    
文章来源:https://dev.to/yogesnsamy/how-to-run-postgresql-and-pgadmin-on-docker-2glg