Docker Compose部署PostgreSQL与pgAdmin持续重启问题求助
解决PostgreSQL与pgAdmin容器持续重启问题
第一步:先查日志定位具体错误
先通过日志找出容器重启的核心原因,这是排查问题的关键:
- 查看Postgres容器日志:
docker logs postgres - 查看pgAdmin容器日志:
docker logs nest-pgadmin4
常见问题及修复方案
1. Windows下Postgres数据目录权限不足
Windows本地手动创建的pgdata文件夹,Docker容器内的postgres用户(UID 999)往往没有读写权限,直接导致Postgres启动失败并反复重启。
修复方式:
- 直接删除本地的
pgdata文件夹,重新执行docker compose up,让Docker自动创建该目录并设置正确权限 - 或者手动给
pgdata文件夹加权限:右键文件夹→属性→安全→编辑→添加「Everyone」用户,勾选「完全控制」权限
2. 端口被占用
检查5432(Postgres)或5050(pgAdmin)端口是否被其他程序占用:
- Windows下执行命令查占用:
netstat -ano | findstr :5432和netstat -ano | findstr :5050 - 如果发现被占用,要么结束对应进程(任务管理器里找PID匹配的程序),要么修改Docker Compose里的端口映射,比如把
5050:80改成5051:80
3. Docker Desktop配置异常
- 确保Docker Desktop启用了WSL 2后端:打开Docker Desktop设置→Resources→WSL Integration,确认已开启对应WSL发行版的集成
- 检查内存分配:设置→Resources→Advanced,建议给Docker分配至少4GB内存,避免因资源不足导致容器重启
4. 优化Compose配置避免兼容性问题
可以调整配置文件,指定具体镜像版本、显式设置数据库参数,同时暂时修改重启策略方便排查:
version: '3.5' services: db: image: postgres:15 # 指定具体版本,避免latest版本的兼容性变动 restart: unless-stopped # 替换always,避免无限重启影响排查 environment: - POSTGRES_PASSWORD=postgres - POSTGRES_USER=postgres # 显式指定用户名,避免默认值歧义 - POSTGRES_DB=nest_db # 提前创建适配NestJS的数据库 container_name: postgres volumes: - ./pgdata:/var/lib/postgresql/data ports: - '5432:5432' pgadmin: image: dpage/pgadmin4:latest restart: unless-stopped container_name: nest-pgadmin4 environment: - PGADMIN_DEFAULT_EMAIL=admin@admin.com - PGADMIN_DEFAULT_PASSWORD=pgadmin4 ports: - '5050:80' depends_on: - db
验证操作
- 彻底清理现有容器和数据卷:
docker compose down -v - 按上述方案修复后,重新启动容器:
docker compose up -d - 查看容器状态:
docker ps,确认两个容器的STATUS为Up状态 - 访问
http://localhost:5050测试pgAdmin是否正常打开
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

