电脑知识铺
第二套高阶模板 · 更大气的阅读体验

Docker容器挂载目录:让数据不随容器消失

发布时间:2026-01-20 14:51:37 阅读:239 次

你有没有遇到过这种情况:在 ref="/tag/2019/" style="color:#874873;font-weight:bold;">Docker 容器里跑了个网站,上传了一堆图片,结果一删容器,图片全没了?其实问题出在容器本身是“临时”的,里面的数据默认不会持久保存。这时候就得靠“挂载目录”来解决。

什么是挂载目录

简单说,就是把宿主机(也就是你电脑)上的一个文件夹,映射到容器里的某个路径。这样容器读写那个路径时,实际上操作的是你电脑上的文件。容器删了没关系,数据还在你硬盘上。

怎么挂载?用 -v 参数

启动容器时加上 -v 参数就能挂载。格式是:-v 宿主机路径:容器内路径

比如你想运行一个 Nginx 容器,顺便把网页文件放在你电脑的 /home/user/mysite 里,可以这样写:

docker run -d --name myweb -p 8080:80 -v /home/user/mysite:/usr/share/nginx/html nginx

这里 /home/user/mysite 是你电脑的文件夹,/usr/share/nginx/html 是 Nginx 默认找网页的地方。现在你往 /home/user/mysite 丢个 index.html,访问 localhost:8080 就能看到。

实际场景:数据库数据保存

再举个常见的例子。用 MySQL 容器时,数据默认存在容器里。一旦容器出问题,数据就丢了。为了避免这种情况,可以把数据库文件挂载出来。

docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=123456 -v /home/user/mysql-data:/var/lib/mysql mysql:8.0

这样就算你重新部署容器,只要换个别名或者删了重建,数据还是从 /home/user/mysql-data 读取,不会丢。

小贴士:路径写绝对路径

挂载时尽量写完整的绝对路径,避免用相对路径。不然容易找不到文件,报错还不好排查。另外,权限也得注意,确保容器进程有读写权限。

和端口映射一样重要

端口映射让你能访问容器里的服务,而目录挂载则是让数据真正留下来。两者经常一起用。比如你开发一个博客项目,前端走端口映射,后端数据通过目录挂载存到本地,调试方便,也不怕崩。