You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Compose启动Postgres容器失败,执行命令报错求助

Postgres Container Exiting Immediately (Exit 1) - Troubleshooting Guide

首先明确回答你的问题:是的,你的Postgres容器确实没有在运行docker-compose ps显示状态为Exit 1,加上docker exec返回的容器未运行报错,这两个都是容器未处于活跃状态的明确信号。

接下来我们一步步排查和解决问题:

1. 先获取容器退出的具体原因

第一步一定要查看容器的日志,这是定位问题最快的方式:

docker logs postgres

对于挂载了本地数据卷的Postgres容器,最常见的报错是目录权限问题——容器内的Postgres进程使用uid=999的用户运行,而你本地的./volumes/postgres目录可能没有给这个用户读写权限,导致进程无法初始化数据目录而退出。

2. 解决权限问题(最可能的修复方案)

如果日志里出现类似permission denied的提示,按以下步骤操作:

  • 先停止并删除现有容器:
    docker-compose down
    
  • 创建(如果不存在)并修正本地数据目录的权限:
    mkdir -p ./volumes/postgres
    sudo chown -R 999:999 ./volumes/postgres
    
    这里999是Postgres官方镜像默认使用的用户UID,给这个用户目录所有权后,容器内的进程就能正常读写数据了。
  • 重新启动容器:
    docker-compose up -d
    

3. 验证修复结果

容器启动后,再次执行docker-compose ps,如果状态显示为Up,就可以尝试连接数据库了。另外注意,你之前的连接命令可以简化:因为是进入容器内部执行psql,不需要指定-h localhost-p 54320,直接用以下命令即可:

docker exec -it postgres psql -U robert mydb

其他可能的排查方向

如果权限不是问题,再检查以下几点:

  • 本地的54320端口是否被其他进程占用?可以用lsof -i :54320netstat -tulpn | grep 54320检查。
  • 确保你的docker-compose.yml格式没有错误(你的配置看起来是合法的,但可以用docker-compose config验证)。

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

火山引擎 最新活动