postgresql - docker 。 Postgres。 pgAdmin4

标签 postgresql docker docker-compose pgadmin pgadmin-4

尝试从 pgAdmin4 连接到 postgresDB。两者都通过 docker compose 进行容器化,并且位于同一网络 backend-db-prod

启动脚本

docker compose --env-file ./.docker/.db.env --env-file ./.docker/.pgadmin.env -f ./.docker/compose.db.yaml up --build --wait

compose.db-env.yaml

version: '3.8'

networks:
  postgres-pg-admin-net:
    driver: bridge

volumes:
  db-data:
  pgadmin-data:

compose.db.yaml

version: "3.8"

include:
  - ./compose.db-env.yaml

services:
  db-prod:
    container_name: backend-db-prod
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 4G
    env_file: ./.db.env
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-db}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
      POSTGRES_PORT: ${POSTGRES_PORT:-5432}
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    image: postgres:16.1-alpine3.18
    networks:
      - postgres-pg-admin-net
    platform: linux/amd64
    ports:
      - ${POSTGRES_PORT}:5432
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data/
      - ./.postgresql.conf:/etc/postgresql.conf

  pgadmin:
    container_name: pgadmin
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 1G
    depends_on:
      - db-prod
    image: dpage/pgadmin4:7.4
    env_file: ./.pgadmin.env
    environment:
      MASTER_PASSWORD_REQUIRED: ${MASTER_PASSWORD_REQUIRED:-False}
      PGADMIN_CONFIG_SERVER_MODE: ${PGADMIN_CONFIG_SERVER_MODE:-False}
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bc91ccdbddd8d1d5d288fcccdbddd8d1d5d292dfd3d1" rel="noreferrer noopener nofollow">[email protected]</a>}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
    volumes:
      - pgadmin-data:/var/lib/pgadmin
      - ./.pgadmin.servers.json:/pgadmin4/servers.json
    platform: linux/amd64
    ports:
      - 5050:80
    restart: unless-stopped
    networks:
      - postgres-pg-admin-net

.db.env

POSTGRES_CONTAINER_NAME=backend-db-dev
POSTGRES_DB=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_PORT=5432
POSTGRES_USER=postgres

.pgadmin.dev

MASTER_PASSWORD_REQUIRED=False
PGADMIN_CONFIG_SERVER_MODE=False
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b5e5f2f4f1f8fcfbeaf1f0f3f4e0f9e1eaf0f8f4fcf988c5d2d4d1d8dcdb81f5c5d2d4d1d8dcdb9bd6dad8" rel="noreferrer noopener nofollow">[email protected]</a>
PGADMIN_DEFAULT_PASSWORD=admin

.pgadmin.servers.json - 用于在 pgAdmin4 处预配置服务器列表的文件,我使用 docker 提供的网络名称别名来设置 Host

{
  "Servers": {
    "main": {
      "Name": "main",
      "Group": "Servers",
      "Port": 5432,
      "Username": "postgres",
      "Host": "backend-db-dev",
      "SSLMode": "prefer",
      "MaintenanceDB": "postgres"
    }
  }
}

当构建容器时,我尝试从 pgAdmin4 连接到 postgres 的数据库并获取此信息 enter image description here

这是数据库连接设置:

enter image description here

在这里你可以看到容器在docker网络中的别名:

enter image description here

问题:

如何正确建立连接?我做错了什么?

最佳答案

您在 pgadmin 中使用“backend-db-dev”,而容器名为 backend-db-prod。连接不起作用,因为这两个不匹配。

关于postgresql - docker 。 Postgres。 pgAdmin4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77526130/

相关文章:

docker - Docker-仅包含操作系统的镜像吗?

amazon-web-services - AWS ECS上的Docker数据容器

docker - docker-compose:修改环境变量

postgresql - Citus 上的主键(UUID、序列)策略

postgresql - 如何计算每个学生的平均分

sql-server - SQL Server与Docker和Entity Framework的连接

docker-compose - 如何更改生产非开发的超集配置 config.py

docker - 在构建时使用 docker-compose 将环境变量传递给 docker 镜像

postgresql - 查询表,包含所有先前位置的 array_agg/median,LAST_10,LAST_50,不包括当前位置

postgresql - 如何在容器内创建 postgres 扩展?