Volume挂载确保容器数据持久化且独立于容器生命周期,推荐用docker volume create创建命名卷并用-v或--mount挂载,支持多容器共享、只读限制及权限配置,可通过docker volume ls/inspect验证和管理。

Volume 挂载数据,核心是让容器读写操作落在 Docker 管理的独立存储空间里,而不是容器自身的可写层。只要挂载正确,容器删了、重启了,数据还在。
创建并挂载命名 Volume(推荐生产用)
这是最稳妥、最易管理的方式,Docker 全程托管路径和生命周期:
- 先创建卷:
docker volume create myapp_data - 启动时挂载:
docker run -v myapp_data:/var/lib/mysql mysql:8.0 - 卷自动存放在
/var/lib/docker/volumes/myapp_data/_data,你不用管具体路径 - 多个容器可同时挂载同一个卷名,实现数据共享
启动时直接创建匿名或命名卷(简洁写法)
适合快速测试或单次部署,省去手动创建步骤:
- 匿名卷(Docker 自动分配 ID):
docker run -v /data nginx—— 容器内/data被映射到随机卷 - 命名卷(更清晰):
docker run -v app_logs:/var/log/myapp nginx—— 卷名明确,便于后续查、备份、迁移 - 注意:如果卷不存在,Docker 会自动创建;如果卷已有内容,容器内对应路径会被覆盖
用 --mount 替代 -v(更清晰、更安全)
Docker 官方推荐用 --mount,语法更明确,尤其适合设置权限或校验:
- 等效于
-v命名卷:docker run --mount source=mydata,target=/app/data nginx - 加只读限制:
--mount source=mydata,target=/app/data,readonly - 指定 UID/GID 避免权限问题:
--mount source=mydata,target=/app/data,uid=1001,gid=1001
验证和日常管理
挂载不是一劳永逸,得确认它真在工作:
- 查卷列表:
docker volume ls - 看卷详情(含物理路径):
docker volume inspect myapp_data - 进容器检查挂载点是否可写:
docker exec -it 容器名 ls -l /var/lib/mysql - 备份卷数据:
tar -cf backup.tar -C /var/lib/docker/volumes/myapp_data/_data .


















