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

运行PostgreSQL Docker Compose服务时Socket连接错误排查求助

PostgreSQL Docker Compose连接错误排查与修复

错误原因分析

你遇到的socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory错误,主要由以下问题导致:

  • unix_socket_directories参数配置错误:该参数要求传入的是socket文件所在的目录路径,而非socket文件本身。你配置的'/var/run/postgresql/.s.PGSQL.5432'是socket文件的完整路径,PostgreSQL会尝试将其作为目录创建socket,直接导致创建失败,socket文件无法生成。

  • 配置文件挂载路径错误:postgres:15.2-alpine镜像的默认配置文件路径是/var/lib/postgresql/data/postgresql.conf,而你挂载到了/etc/postgresql/postgresql.conf——这个路径是Debian/Ubuntu发行版中PostgreSQL包的默认路径,Alpine镜像并不使用这个位置,导致容器内的PostgreSQL根本没加载到你的自定义配置。

  • 配置文件权限问题(潜在隐患):如果本地的postgresql.conf文件权限不是容器内postgres用户(UID通常为999)可读取的,PostgreSQL启动时会加载配置失败,进而导致服务异常,socket无法创建。

修复步骤

1. 修正postgresql.conf配置

将unix_socket_directories改为正确的目录路径,比如容器内默认存在的目录:

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

PostgreSQL会自动在该目录下创建.s.PGSQL.5432 socket文件。

2. 调整Docker Compose的挂载路径

修改docker-compose.yml中配置文件的挂载目标路径:

db:
  image: postgres:15.2-alpine
  container_name: postgresql
  restart: on-failure
  environment:
    POSTGRES_USER: "${DB_USER}"
    POSTGRES_PASSWORD: "${DB_PASS}"
    POSTGRES_DB: "${DB_NAME}"
  volumes:
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
  ports:
    - "5432:5432"

3. 修复配置文件权限

在本地执行命令,将postgresql.conf的权限改为容器内postgres用户可读取:

chown 999:999 ./postgresql.conf

4. 重启服务

停止现有容器并重新启动:

docker-compose down
docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26