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

Laravel+Docker-Compose环境下PostgreSQL数据无法持久化求助

解决Docker中PostgreSQL数据丢失问题

排查本地挂载目录权限问题

PostgreSQL容器内部运行的用户是postgres(UID为999),如果本地挂载目录的权限不匹配,容器无法读写数据,会导致每次启动都初始化新数据库。

解决步骤:

  • 手动创建本地挂载目录并设置正确权限:
    mkdir -p ./storage/app/postgresql/data
    sudo chown -R 999:999 ./storage/app/postgresql/data
    
  • 重新启动容器:
    docker-compose down
    docker-compose up -d
    

改用Docker命名卷(更可靠)

本地目录挂载(bind mount)容易出现权限或路径问题,改用Docker命名卷可避免此类问题,Docker会自动管理卷的权限和存储。

修改docker-compose.yml中db服务的volumes配置:

services:
  db:
    # 其他配置保持不变
    volumes:
      - postgres_data:/var/lib/postgresql/data

# 在文件末尾添加命名卷定义
volumes:
  postgres_data:

执行重启命令:

docker-compose down
docker-compose up -d

命名卷的数据会存储在Docker默认存储路径(通常为/var/lib/docker/volumes/),不会因本地目录问题丢失数据。

验证数据持久化

执行迁移后,执行docker-compose down再up -d,进入容器验证数据:

docker exec -it docker-db psql -U ${DB_USERNAME} ${DB_DATABASE}
# 在psql中执行查询验证,比如查看迁移表:
SELECT * FROM migrations;

额外检查点

  • 确保.env文件中的DB_PASSWORD、DB_USERNAME、DB_DATABASE每次启动时一致,避免容器启动时创建新数据库。
  • 查看容器启动日志排查权限错误:
    docker logs docker-db
    

若日志中出现could not open directory "/var/lib/postgresql/data": Permission denied类信息,说明权限问题未解决,回到第一步重新设置权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:52:10