簡體   English   中英

將 pgadmin 連接到 docker 中的 postgres

[英]Connecting pgadmin to postgres in docker

我有一個docker-compose文件,其中包含用於pythonnginxpostgrespgadmin

services:
  postgres:
    image: postgres:9.6
    env_file: .env
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5431:5431"

  pgadmin:
    image: dpage/pgadmin4
    links:
      - postgres
    depends_on:
      - postgres
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: pwdpwd
    volumes:
      - pgadmin:/root/.pgadmin
    ports:
      - "5050:80"

  backend:
    build:
      context: ./foobar  # This refs a Dockerfile with Python and Django requirements
    command: ["/wait-for-it.sh", "postgres:5431", "--", "/gunicorn.sh"]
    volumes:
      - staticfiles_root:/foobar/static
    depends_on:
      - postgres

  nginx:
    build:
      context: ./foobar/docker/nginx
    volumes:
      - staticfiles_root:/foobar/static
    depends_on:
      - backend
    ports:
      - "0.0.0.0:80:80"

volumes:
  postgres_data:
  staticfiles_root:
  pgadmin:

當我運行docker-compose up並訪問localhost:5050 ,我看到了pgadmin界面。 當我嘗試在那里創建一個新服務器,使用localhost0.0.0.0作為主機名和5431作為端口時,我收到錯誤“無法連接到服務器”。 如果我刪除這些並在“服務”字段中輸入postgres ,我會收到錯誤“未找到服務定義“postgres””。 如何使用pgadmin連接到數據庫?

請注意默認 postgres 端口是 5432 而不是 5431。您應該在撰寫文件中更新 postgres 服務的端口映射。 錯誤的端口可能是您報告的問題的原因。 更改端口映射,然后嘗試連接到 postgres:5432。 本地主機:5432 將不起作用。

當您運行 docker-compose 為文件夾名稱添加前綴(以保持容器名稱唯一)時,docker 容器名稱會更改。 您可以使用container_name屬性強制容器的名稱

version: "3"
services:

  # postgres database
  postgres:
    image: postgres:12.3
    container_name: postgres
    environment:
      - POSTGRES_DB=admin
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin
      - POSTGRES_HOST_AUTH_METHOD=trust # allow all connections without a password. This is *not* recommended for prod
    volumes:
      - database-data:/var/lib/postgresql/data/ # persist data even if container shuts down
    ports:
      - "5432:5432"

  # pgadmin for managing postgis db (runs at localhost:5050)
  # To add the above postgres server to pgadmin, use hostname as defined by docker: 'postgres'
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin
      - PGADMIN_DEFAULT_PASSWORD=admin
      - PGADMIN_LISTEN_PORT=5050
    ports:
      - "5050:5050"
  
volumes:
  database-data:

另一種選擇是將 postgres 容器連接到 localhost

network_mode: host

但是這樣你就失去了與 docker 良好的網絡隔離

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM