尝试从 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 的数据库并获取此信息
这是数据库连接设置:
在这里你可以看到容器在docker网络中的别名:
问题:
如何正确建立连接?我做错了什么?
最佳答案
您在 pgadmin 中使用“backend-db-dev”,而容器名为 backend-db-prod。连接不起作用,因为这两个不匹配。
关于postgresql - docker 。 Postgres。 pgAdmin4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77526130/