使用pgAdmin 4连接Docker部署的PostgreSQL服务器失败求助
解决pgAdmin连接PostgreSQL容器失败的问题
1. 修正pgAdmin连接的主机地址
在pgAdmin创建服务器时,不要填写127.0.0.1。因为pgAdmin运行在独立容器中,和PostgreSQL容器处于同一Docker内部网络,需使用PostgreSQL服务的名称postgres作为主机地址,端口保持5432不变。
2. 修复docker-compose配置的语法错误
你的配置文件存在YAML缩进和格式问题,正确配置如下:
version: '3.8' services: postgres: image: postgres:13 # PostgreSQL版本 container_name: postgres_container environment: POSTGRES_USER: admin POSTGRES_PASSWORD: admin POSTGRES_DB: postgres volumes: - postgres_data:/var/lib/postgresql/data - ../src/scripts/data/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载初始化脚本 ports: - "5432:5432" pgadmin: image: dpage/pgadmin4:latest # pgAdmin官方镜像 container_name: pgadmin_container environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com # pgAdmin登录邮箱 PGADMIN_DEFAULT_PASSWORD: admin # pgAdmin登录密码 ports: - "8080:80" # 暴露pgAdmin到本地8080端口 depends_on: - postgres volumes: - pgadmin_data:/var/lib/pgadmin volumes: postgres_data: pgadmin_data:
关键修正点:
postgres服务的volumes下两个挂载项需同级,均以-开头depends_on中的服务名需添加-,符合YAML列表格式
3. 验证PostgreSQL容器状态
执行命令查看容器运行状态:
docker-compose ps
若postgres容器状态不是Up,查看日志排查启动失败原因:
docker-compose logs postgres
重点检查init.sql是否存在语法错误,以及宿主机上../src/scripts/data/init.sql的路径是否与docker-compose.yml的位置匹配。
4. 确认本地端口未被占用
若宿主机已有PostgreSQL服务占用5432端口,会导致容器端口映射失败。执行以下命令检查端口占用:
# Linux/macOS lsof -i :5432 # Windows netstat -ano | findstr :5432
若端口被占用,可停止本地PostgreSQL服务,或修改docker-compose中PostgreSQL的端口映射(例如改为"5433:5432"),容器间连接仍用5432,本地连接则用5433。
内容的提问来源于stack exchange,提问作者Sarah LENET
相关产品推荐
相关产品推荐

