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

Rails连接Docker Postgres报.s.PGSQL.5432套接字不存在错误

问题原因

报错本质是Rails的Postgres适配器默认连接逻辑和你的部署场景不匹配:

  • 当database.yml中未配置host参数时,Rails不会发起TCP网络连接,而是直接尝试读取本地文件系统上Postgres的Unix Socket文件,默认路径就是/tmp/.s.PGSQL.5432
  • 你的Postgres实例运行在Docker容器中,容器内部的Socket文件隔离在容器独立文件系统内,不会出现在宿主机的/tmp目录下,自然会触发文件不存在的报错
  • TablePlus等第三方客户端能正常连接,是因为连接时显式指定了主机地址,走TCP协议连接Docker映射到宿主机的数据库端口,和Rails当前默认的Socket连接逻辑完全不同。
修复步骤
  1. 确认Docker端口映射规则
    执行docker ps查看运行中的Postgres容器,确认端口列存在127.0.0.1:5432->5432/tcp的映射关系。如果没有该映射,需要重建容器,启动时添加端口映射参数-p 127.0.0.1:5432:5432,将容器内的5432端口映射到宿主机本地的5432端口。
  2. 修改数据库配置
    编辑项目下的config/database.yml,在default配置段中添加host和port参数,强制走TCP连接,修改后的default段配置如下:
    default: &default
      adapter: postgresql
      encoding: unicode
      host: 127.0.0.1
      port: 5432
      username: postgres
      password: postgres
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    
    注意不要把host写成localhost,部分系统下localhost仍会被解析为Unix Socket连接,直接写127.0.0.1可以强制走TCP协议,避免兼容问题。
  3. 验证修复
    保存配置后重启正在运行的Rails服务,再执行数据库操作(比如rails db:migrate、接口请求访问数据库)即可正常连接。下方的development、test、production配置段因为继承了default的公共配置,不需要额外修改。

内容的提问来源于stack exchange,提问作者pastel-bucket

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:18:43