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

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

验证操作

  1. 彻底清理现有容器和数据卷:docker compose down -v
  2. 按上述方案修复后,重新启动容器:docker compose up -d
  3. 查看容器状态:docker ps,确认两个容器的STATUS为Up状态
  4. 访问http://localhost:5050测试pgAdmin是否正常打开

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:14