Docker Compose部署pgAdmin后浏览器无法查看PostgreSQL表的问题
问题描述
我用下面的Docker Compose文件部署了PostgreSQL和pgAdmin:
version: '1' services: postgres: container_name: postgres_container image: 'postgres:latest' environment: POSTGRES_USER: ${POSTGRES_USERNAME} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DATABASE} ports: - 5432:5432 networks: app_network: ipv4_address: 172.26.0.11 restart: unless-stopped healthcheck: test: ['CMD', 'pg_isready -U postgres'] interval: 5s timeout: 5s retries: 5 volumes: - postgres:/data/postgres pgadmin: container_name: pgadmin_container image: dpage/pgadmin4 depends_on: - postgres volumes: - pgadmin:/var/lib/pgadmin environment: PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-'email'} PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-'password'} PGADMIN_CONFIG_SERVER_MODE: 'False' ports: - '${PGADMIN_PORT:-5050}:80' networks: - app_network restart: unless-stopped networks: app_network: external: true driver: bridge volumes: postgres: pgadmin:
通过Postman发的数据能正常存到本地pgAdmin关联的PostgreSQL里,但访问localhost:5050/browser/时,对应的表就是不显示,而且我已经正确配置了浏览器端pgAdmin的数据库连接。
本地pgAdmin的表截图:
浏览器端pgAdmin的表截图:
排查与解决步骤
- 核对连接的数据库信息:检查浏览器端pgAdmin连接的数据库名、用户名是否和本地pgAdmin完全一致——很可能你在浏览器端连的是默认的
postgres库,而数据实际存在你指定的${POSTGRES_DATABASE}库中。 - 强制刷新表列表:右键点击浏览器端pgAdmin中对应数据库下的「表」选项,选择「刷新」,或者直接按F5键,界面缓存经常会导致表不显示。
- 检查schema路径:数据可能存在非
public的schema下。在浏览器端pgAdmin里展开数据库的「schema」节点,看看有没有其他schema,目标表可能藏在里面。 - 验证用户权限:确保浏览器端pgAdmin用的数据库用户(
${POSTGRES_USER})有查看目标表的权限。可以执行这条SQL命令赋权:GRANT SELECT ON ALL TABLES IN SCHEMA public TO 你的用户名; - 测试容器网络连通性:进入pgAdmin容器,ping PostgreSQL的容器IP(172.26.0.11)或者用
psql连接测试,确认网络没问题:docker exec -it pgadmin_container bash ping 172.26.0.11 psql -h 172.26.0.11 -U 你的用户名 -d 你的数据库名 - 重启pgAdmin容器:有时候容器内的pgAdmin进程会出异常,重启一下就能解决:
docker restart pgadmin_container
内容的提问来源于stack exchange,提问作者John Oliver
相关产品推荐
相关产品推荐

