重装docker容器时,laravel项目必须保留数据库内容、用户上传文件、.env配置及源码,通过命名卷或宿主机挂载实现持久化;可丢弃vendor、opcache、临时会话等运行时生成内容。

重装 Docker 容器时,Laravel 项目真正需要保留的不是容器本身,而是数据和配置——因为容器是无状态、可随时重建的。关键在于区分哪些内容属于“可丢弃”,哪些必须迁移或复用。
必须保留的应用数据
这些数据一旦丢失,会导致业务中断或信息不可逆丢失:
-
数据库内容:MySQL/PostgreSQL 的实际数据(用户、订单、文章等)。不能依赖容器内文件系统,必须使用命名卷(
named volume)或绑定挂载到宿主机持久目录。检查方式:docker volume ls,确认db服务是否关联了如laravel_db_data这类卷。 -
文件存储:用户上传的图片、PDF、附件等,通常存放在
storage/app/public或public/uploads。若未挂载,重启后即消失。应通过volumes映射到宿主机固定路径,例如:./storage:/var/www/html/storage。 -
日志与缓存(按需):生产环境建议保留
storage/logs和storage/framework/cache(尤其当使用 file 缓存驱动时),但更推荐统一接入 ELK 或 Redis 缓存,降低本地依赖。
必须保留的配置与源码
它们不随容器生命周期变化,但决定应用行为:
-
.env文件:包含数据库密码、APP_KEY、API 密钥等敏感配置。切勿 COPY 进镜像,必须通过volumes挂载(如./.env:/var/www/html/.env:ro),且确保容器内权限允许读取(www-data 可读)。 -
Laravel 源码(除 vendor 外):业务代码、配置文件(
config/)、路由、迁移文件等。一般通过绑定挂载./:/var/www/html实现热更新,重装时自然保留;若使用COPY . .构建进镜像,则需重新构建镜像,但源码本身仍在宿主机。 -
生成的密钥与链接:如
APP_KEY、storage:link创建的软链(public/storage → storage/app/public)。前者在.env中,后者需在新容器启动脚本中自动执行(如php artisan storage:link)。
可以安全丢弃的内容
这些由构建过程或运行时自动生成,重装后可一键重建:
-
容器内
vendor/目录:由composer install生成,只要composer.json/lock在,重建镜像或运行docker-compose run --rm app composer install即可恢复。 -
PHP OPcache / 编译缓存:位于
storage/framework/opcache或内存中,重启即清空,不影响功能。 -
临时会话(file 驱动):若用
session.driver=file,且未挂载storage/framework/sessions,则会话丢失——这反而是预期行为,建议改用 redis 或 database 驱动。 -
旧容器镜像与停止的容器实例:用
docker image prune和docker container prune清理即可,只要数据卷和配置还在,就无风险。
重装前建议操作清单
执行 docker-compose down 前,快速确认以下几项:
- 运行
docker volume ls,记录所有关联 Laravel 服务的卷名(如myapp_db,myapp_storage); - 检查
docker-compose.yml中volumes:配置,确认挂载路径真实存在且有读写权限; - 备份
.env文件到安全位置(含注释说明各变量用途); - 对数据库做一次手动导出(
docker exec db mysqldump -u laravel -psecret laravel_local > backup.sql),作为兜底手段。











