Docker网络问题:本地DataHub/OpenMetadata无法连接PostgreSQL
解决方案
1. 统一Docker网络(核心方案)
不同docker-compose栈默认处于独立网络,导致容器间无法通过容器名互通。解决办法是把所有服务加入同一个自定义网络:
- 创建自定义网络:
docker network create data_platform_net - 修改每个服务的docker-compose.yml,给所有容器指定这个网络:
以PostgreSQL的配置为例:version: '3.8' services: postgres: image: postgres:15 container_name: pg_container ports: - "5432:5432" environment: POSTGRES_USER: your_user POSTGRES_PASSWORD: your_pass networks: - data_platform_net pgadmin: image: dpage/pgadmin4 ports: - "5050:80" environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: admin networks: - data_platform_net networks: data_platform_net: external: true - 同样给DataHub、OpenMetadata的docker-compose.yml添加相同的
networks配置,声明外部网络后重启所有容器。此时用pg_container:5432就能连接PostgreSQL。
2. 检查PostgreSQL的访问权限
PostgreSQL默认可能只允许本地连接,需要修改配置开放外部访问:
- 进入PostgreSQL容器:
docker exec -it pg_container bash - 编辑
/var/lib/postgresql/data/postgresql.conf,修改监听地址:listen_addresses = '*' - 编辑
/var/lib/postgresql/data/pg_hba.conf,添加允许所有IP访问的规则:host all all 0.0.0.0/0 scram-sha-256 - 重启容器生效:
docker restart pg_container
3. 用Mac Docker专属域名访问
Mac Docker提供host.docker.internal域名,可直接映射到宿主机网络。只要PostgreSQL容器做了端口映射(ports: - "5432:5432"),DataHub/OpenMetadata就能用host.docker.internal:5432作为连接地址。
4. 排查网络连通性
先验证容器间基础连通性:
- 进入DataHub/OpenMetadata容器,ping PostgreSQL容器名:
docker exec -it <datahub_container_name> ping pg_container- ping不通:回到方案1统一网络
- ping通但连不上数据库:检查PostgreSQL端口配置、用户名密码是否正确
内容的提问来源于stack exchange,提问作者maximusKarlson
相关产品推荐
相关产品推荐

