You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:25:29