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

容器可写层随删除消失,持久数据用命名卷或绑定挂载;tmpfs 用于临时数据,可能进入 swap。另有 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                          # 找到退出的容器
mkdir -p ./rescue
docker cp exited-app:/app/data/. ./rescue/

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

三种挂载方式怎么选

方式 数据位置 适用
命名卷 Docker 管理的宿主机目录 数据库、应用数据(首选,权限/迁移友好)
绑定挂载 你指定的宿主机路径 配置文件、代码、要直接读写的日志
tmpfs 内存 反向需求:临时、非持久数据;可能进入swap,不保证不落盘

数据库类数据的特别强调

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

常见问题(FAQ)

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

Q:docker stop 会丢数据吗?
A:普通 stop 保留可写层;但以 --rm 创建的容器退出后会自动删除,tmpfs 内容也不会持久保留。

Q:匿名卷是什么?
A:-v /app/data(不指名)或 Dockerfile 的 VOLUME 指令产生的随机名卷,容器删后易成无主残留,可用 docker volume ls -f dangling=true 检查;--rm 或 rm -v 可能自动删除关联匿名卷,命名卷语义不同。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台