代码之家  ›  专栏  ›  技术社区  ›  b442

Docker。Postgres。pgAdmin4

  •  1
  • b442  · 技术社区  · 2 年前

    正在尝试从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:[email protected]}
          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
    PGADMIN_DE[email protected]
    PGADMIN_DEFAULT_PASSWORD=admin
    

    .pgadmin.servers.json -在pgAdmin4中预先配置服务器列表的文件,im使用docker提供的网络名称别名进行设置 Host

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

    当容器被构建时,我试图从pgAdmin4连接到postgres的DB,并得到这个 enter image description here

    这是数据库连接设置:

    enter image description here

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

    enter image description here

    问题:

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

    1 回复  |  直到 2 年前
        1
  •  2
  •   Reda Bourial    2 年前

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