Docker 容器退出/删除后如何保住数据?

容器可写层随删除消失,保数据靠三类挂载:命名卷(应用数据首选)、绑定挂载(要直接访问宿主机文件)、tmpfs(反之,内存不留痕);另有 docker cp 抢救已退出容器的数据。

最佳实践
Docker 容器退出/删除后如何保住数据?封面

核心认知:容器的文件写入默认可写层,容器删除即丢失。保数据必须在写入时就落到容器外——命名卷(docker run -v mydata:/app/data,数据库等首选)、绑定挂载(-v /host/path:/app/data,配置/日志直读宿主机)、或宿主机目录挂载。容器已退出还没删?docker cp 还能把数据抢救出来。

预防:写入时就挂卷

docker volume create appdata
docker run -d -v appdata:/app/data myimage

容器随便删、随便重建,/app/data 里的东西都在卷里。

抢救:容器已退出但未删除

已退出的容器可写层还在磁盘上:

docker ps -a                          # 找到退出的容器
docker cp exited-app:/app/data ./rescue

整个目录拷出来,确认数据齐了再删容器。

三种持久化方式怎么选

方式 数据位置 适用
命名卷 Docker 管理的宿主机目录 数据库、应用数据(首选,权限/迁移友好)
绑定挂载 你指定的宿主机路径 配置文件、代码、要直接读写的日志
tmpfs 内存 反向需求:敏感数据不留盘

数据库类数据的特别强调

  1. 数据库容器必须挂卷,且备份用 mysqldump/pg_dump 等工具做逻辑备份,不能只指望卷
  2. 升级镜像时先备份再换容器,验证新容器读写正常
  3. 卷也别忘纳入宿主机级备份策略

观测云对照

日志数据的持久化交给采集链路。 应用日志与其靠容器内文件,不如实时采集到观测云:容器生灭与日志留存解耦,存储策略集中管理,随时可查历史。

常见问题(FAQ)

Q:容器还在运行,数据安全吗?
A:运行中可写层一直在;但宿主机故障、误 rm 都会丢,重要数据挂卷+备份双保险。

Q:docker stop 会丢数据吗?
A:不会,stop 只停进程;docker rm 才删可写层。

Q:匿名卷是什么?
A:-v /app/data(不指名)或 Dockerfile 的 VOLUME 指令产生的随机名卷,容器删后易成无主残留,定期 docker volume ls -f dangling=true 检查。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台