Skip to content

数据卷与挂载

什么是数据卷?

  • 我们要知道一件事,容器是一次性的。
  • 一个容器启动起来后,容器内的文件和目录会随着容器的停止而被永久删除,导致容器数据丢失。所以用数据卷来存储容器数据。
命令 说明
docker volume ls 查看所有数据卷
docker volume create 数据卷名称 创建数据卷
docker volume inspect 数据卷ID/名称 查看数据卷详情
docker volume prune 删除所有未使用的数据卷
docker volume rm 数据卷ID/名称 删除指定数据卷

挂载说明

通过挂载将容器内部需要记录的数据挂载到主机上,实现数据持久化。

相关命令:docker run -d --name 容器名称 -v 数据卷名称:容器内路径 镜像名称:版本号

数据卷案例

bash
# 一般情况,启动容器时候后面加上-v参数,没有指定数据卷名称,会自动创建一个数据卷。
[root@rocky vitepress]# docker run -d --name test -v blogvl:/usr/share/nginx/html myblog:v1.0
5975ca0beb78c94e343fa0a60be5e93129b6111bdc94fb917dadefcb0e329184  

# 查看数据卷
[root@rocky vitepress]# docker volume ls
DRIVER    VOLUME NAME
local     blogvl

# 查看数据卷详情
[root@rocky vitepress]# docker volume inspect blogvl
[
    {
        "CreatedAt": "2026-04-02T15:36:59+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/blogvl/_data",
        # 数据卷的存放路径在/var/lib/docker/volumes/数据卷名称或者ID/_data
        "Name": "blogvl",
        "Options": null,
        "Scope": "local"
    }
]

# 查看数据卷文件内容,这是刚才指定的容器内路径/usr/share/nginx/html/下的文件都挂载到了这里
[root@rocky vitepress]# ls /var/lib/docker/volumes/blogvl/_data/
404.html  50x.html  assets  Development_log  hashmap.json  img  index.html  Ku  Life_log  Other  svg  Tech_log  video  vp-icons.css

挂载案例

bash

docker volume create volume1   # 创建数据卷volume1
# 编辑数据卷volume1的index.html文件里面写一个Hello World
vim /var/lib/docker/volumes/volume1/_data/index.html   

# 启动一个容器,挂载数据卷volume1到容器内路径/usr/share/nginx/html/
[root@rocky ~]#  docker run --name test1 -d -p 81:80 -v volume1:/usr/share/nginx/html myblog:v1.0
47cac816be7b39f459e90438742e3655bb0205cda573fb078dbbbb243708d56d
# 访问81端口,会显示Hello World,原来的index.html文件内容被volume1的index.html文件内容替换掉了
图片丢失了

注意

  • 大多情况下,都是volume数据卷写入容器 volume容器
  • 只有在容器启动时候,指定挂载数据卷,容器里的内容才会写入数据卷volume,包括在容器内更改创建新内容。 容器volume
全速前进中...