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

无法通过自托管Directus连接本地PostgreSQL数据库求助

问题描述

通过Supabase Docker Compose部署本地PostgreSQL数据库后,本地执行以下命令可正常连接:

psql -h localhost -p 5432 -U postgres  

但使用Docker Compose部署的自托管Directus尝试连接时失败,错误信息如下:

directus-directus-1  | Error: connect ECONNREFUSED 127.0.0.1:5432
directus-directus-1  |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16) {
directus-directus-1  |   errno: -111,
directus-directus-1  |   code: 'ECONNREFUSED',
directus-directus-1  |   syscall: 'connect',
directus-directus-1  |   address: '127.0.0.1',
directus-directus-1  |   port: 5432
directus-directus-1  | }

Directus的Docker Compose配置文件如下:

version: "3"
services:
  directus:
    image: directus/directus:10.9.0
    ports:
      - 8055:8055
    volumes:
      - ./database:/directus/database
      - ./uploads:/directus/uploads
      - ./extensions:/directus/extensions
    environment:
      KEY: "replace-with-random-value"
      SECRET: "replace-with-random-value"
      DB_CLIENT: "pg"
      DB_HOST: "localhost"
      DB_PORT: "5432"
      DB_DATABASE: "postgres"
      DB_USER: "postgres"
      DB_PASSWORD: "your-super-secret-and-long-postgres-password"
      WEBSOCKETS_ENABLED: "true"
问题排查与解决

核心原因

Docker容器内的localhost指向容器自身,而非宿主机。你的Directus容器尝试连接自己的5432端口,但该端口并未运行PostgreSQL服务,因此触发ECONNREFUSED错误。

针对性解决方法

场景1:Supabase与Directus在同一Docker Compose网络中

如果Supabase和Directus是通过同一套Docker Compose部署的,直接修改Directus配置中的DB_HOST为Supabase的PostgreSQL服务名称(Supabase默认服务名为db):

DB_HOST: "db"

重启Directus容器即可生效。

场景2:Supabase与Directus不在同一Docker Compose网络中

  1. 替换localhost为宿主机IP:
    找到宿主机的局域网IP(例如192.168.1.100),修改Directus的DB_HOST为该IP:
    DB_HOST: "192.168.1.100"
    
  2. 允许PostgreSQL监听外部连接:
    修改Supabase的PostgreSQL配置(通常在supabase/docker/db/init/00-config.sql或对应配置文件),将listen_addresses设置为'*',开放外部连接权限。
  3. 更新PostgreSQL用户连接权限:
    确保postgres用户允许从Directus所在网络连接,执行以下SQL:
    ALTER USER postgres WITH PASSWORD 'your-super-secret-and-long-postgres-password';
    GRANT ALL PRIVILEGES ON DATABASE postgres TO postgres;
    ALTER USER postgres CONNECTION LIMIT -1;
    
    也可以创建专门的Directus连接用户:
    CREATE USER directus_user WITH PASSWORD 'directus-password';
    GRANT ALL PRIVILEGES ON DATABASE postgres TO directus_user;
    
    同步更新Directus配置中的DB_USER和DB_PASSWORD。
  4. 重启容器:
    重启Supabase和Directus容器,让所有配置生效。

额外检查项

  • 确认宿主机5432端口未被防火墙/安全组拦截。
  • 通过docker ps检查Supabase的PostgreSQL容器是否正常运行。
  • 验证Directus容器能否ping通宿主机IP或Supabase的PostgreSQL服务名称。

内容的提问来源于stack exchange,提问作者Yogesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:45:22