[英]Connecting pgadmin to postgres in docker
我有一個docker-compose
文件,其中包含用於python
、 nginx
、 postgres
和pgadmin
:
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
界面。 當我嘗試在那里創建一個新服務器,使用localhost
或0.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.