docker volume卷入门教程

1. 基础概念

Docker卷是专门用于持久化容器数据的存储方案,独立于容器生命周期。其核心优势包括:

  • 数据持久化:容器删除后数据仍保留
  • 跨容器共享:多个容器可访问同一卷
  • 备份与迁移:支持直接复制卷数据
  • 驱动支持:可对接云存储(如AWS S3)

2. 卷类型详解

类型示例特性
命名卷my_data由Docker管理,存储在/var/lib/docker/volumes/
匿名卷随机ID容器删除时自动清理(需配合--rm
绑定挂载/host/path:/container/path手动指定主机目录,性能最优

3. 常用命令详解

docker volume create
# 创建命名卷
docker volume create my_data# 指定驱动(需安装对应插件)
docker volume create --driver local --opt type=nfs --opt device=:/nfs/share my_nfs
docker volume inspect
# 查看卷详细信息
docker volume inspect my_data# 输出格式化结果
docker volume inspect --format '{{.Mountpoint}}' my_data
docker volume rm
# 删除未使用的卷
docker volume rm my_data# 强制删除正在使用的卷(需配合`-f`)
docker volume rm -f my_data
docker volume prune
# 清理所有未使用的卷
docker volume prune# 交互式确认删除
docker volume prune -f

4. 基础操作示例

创建并挂载卷
# 创建命名卷
docker volume create app_data# 运行容器并挂载卷
docker run -d \--name web \-v app_data:/app/data \nginx:latest
绑定主机目录
# 将主机目录挂载到容器(需手动管理权限)
docker run -d \--name mysql \-v /host/mysql_data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=secret \mysql:5.7
备份卷数据
# 导出卷数据到主机
docker run --rm \-v app_data:/source \-v /host/backup:/target \ubuntu tar czf /target/backup.tar.gz -C /source .

5. 高级用法

卷共享
# 多个容器共享同一卷
docker run -d --name worker1 -v app_data:/app busybox sleep 3600
docker run -d --name worker2 -v app_data:/app busybox sleep 3600
卷迁移
# 导出卷数据
docker run --rm -v app_data:/source busybox tar czf - /source > backup.tar.gz# 导入到新卷
docker volume create new_app_data
docker run --rm -v new_app_data:/target busybox sh -c "tar xzf - -C /target" < backup.tar.gz
自动清理策略
# 配置Docker删除未使用的卷(需修改daemon.json)
{"volumes": {"autoPrune": true,"pruneInterval": "1h"}
}
卷驱动扩展
# 使用云存储驱动(示例为AWS S3)
docker volume create --driver convoy --opt bucket=my-bucket my_s3_volume

6. 验证卷状态

查看卷使用情况
# 列出所有卷
docker volume ls# 过滤已使用卷
docker volume ls --filter "dangling=false"
检查卷空间占用
# 查看卷存储路径
docker volume inspect --format '{{.Mountpoint}}' my_data# 使用du命令检查空间
sudo du -sh /var/lib/docker/volumes/my_data/_data
验证数据完整性
# 在容器内写入测试数据
docker exec web sh -c "echo 'test' > /app/data/file.txt"# 从主机读取验证
sudo cat /var/lib/docker/volumes/my_data/_data/file.txt

7. 常见问题解决

问题1:卷无法删除
Error response from daemon: remove <卷名>: volume is in use and cannot be removed

解决方案

  • 确认容器状态:docker ps -a | grep <卷名>
  • 停止并删除关联容器:
    docker stop $(docker ps -q --filter "volume=<卷名>")
    docker rm -v $(docker ps -aq --filter "volume=<卷名>")
    
问题2:绑定挂载权限错误
Error: failed to start container: Permission denied

解决方案

  • 调整主机目录权限:
    sudo chmod 777 /host/path
    sudo chown $USER:$USER /host/path
    
问题3:卷数据丢失
Error: file not found in container

解决方案

  • 检查卷挂载路径是否正确:
    docker inspect web | grep "Mounts" -A 5
    
  • 恢复备份:
    docker run --rm -v new_app_data:/target busybox sh -c "tar xzf - -C /target" < backup.tar.gz
    
问题4:卷驱动不可用
Error response from daemon: create my_s3_volume: Driver <驱动名> not found

解决方案

  • 安装对应驱动插件:
    docker plugin install convoy --alias convoy-s3
    

8. 最佳实践

  1. 命名规范:使用有意义的卷名(如app_logs而非vol1
  2. 定期备份:结合cron任务自动备份关键卷
  3. 权限控制:绑定挂载时避免使用777权限
  4. 资源监控:使用du -sh定期检查大体积卷
  5. 标签管理:为生产环境卷添加标签:
    docker volume create --label env=prod --label app=web my_prod_data
    

9. 示例流程

# 1. 创建并挂载卷
docker volume create web_assets
docker run -d --name static -v web_assets:/usr/share/nginx/html nginx:latest# 2. 上传静态文件到卷
docker cp ./assets/* static:/usr/share/nginx/html# 3. 备份卷数据
docker run --rm -v web_assets:/source busybox tar czf - /source > web_assets_$(date +%Y%m%d).tar.gz# 4. 迁移卷到新环境
scp web_assets_20250814.tar.gz user@new-host:/backup
ssh user@new-host "docker volume create web_assets_new && cat /backup/web_assets_20250814.tar.gz | docker run --rm -i -v web_assets_new:/target busybox tar xzf - -C /target"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93061.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——协议

1. 计算机网络分层1.1 OSI 7层模型应用层表示层会话层传输层网络层数据链路层物理层1.2 TCP/IP 4 层模型应用层运输层网际层网络接口层1.3 5层体系机构应用层传输层网络层数据链路层物理层2. 应用层协议2.1 HTTP协议2.1.1 基本介绍HTTP&#xff08;HyperText Transfer Protocol…

【React】hooks 中的闭包陷阱

在 React Hooks 中的 闭包陷阱&#xff08;Closure Trap&#xff09;在 useEffect、事件回调、定时器等场景里很常见。1. 闭包陷阱是什么 当你在函数组件里定义一个回调&#xff08;比如事件处理函数&#xff09;&#xff0c;这个回调会捕获当时渲染时的变量值。如果后面状态更…

校园快递小程序(腾讯地图API、二维码识别、Echarts图形化分析)

&#x1f388;系统亮点&#xff1a;腾讯地图API、二维码识别、Echarts图形化分析&#xff1b;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17小程序&#xff1a; 技术…

Python网络爬虫(二) - 解析静态网页

文章目录一、网页解析技术介绍二、Beautiful Soup库1. Beautiful Soup库介绍2. Beautiful Soup库几种解析器比较3. 安装Beautiful Soup库3.1 安装 Beautiful Soup 43.2 安装解析器4. Beautiful Soup使用步骤4.1 创建Beautiful Soup对象4.2 获取标签4.2.1 通过标签名获取4.2.2 通…

【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由

在网络环境中&#xff0c;了解数据包从源主机到目标主机的路径是非常重要的。这不仅可以帮助我们分析网络连接问题&#xff0c;还可以用于诊断网络延迟、丢包等问题。traceroute命令是一个强大的工具&#xff0c;它能够追踪数据包在网络中的路径&#xff0c;显示每一跳的延迟和…

达梦数据闪回查询-快速恢复表

Time:2025/08/12Author:skatexg一、环境说明DM数据库&#xff1a;DM8.0及以上版本二、适用场景研发在误操作或变更数据后&#xff0c;想马上恢复表到某个时间点&#xff0c;可以通过闪回查询功能快速实现&#xff08;通过全量备份恢复时间长&#xff0c;成本高&#xff09;三、…

力扣(LeetCode) ——225 用队列实现栈(C语言)

题目&#xff1a;用队列实现栈示例1&#xff1a; 输入&#xff1a; [“MyStack”, “push”, “push”, “top”, “pop”, “empty”] [[], [1], [2], [], [], []] 输出&#xff1a; [null, null, null, 2, 2, false] 解释&#xff1a; MyStack myStack new MyStack(); mySta…

微软推出AI恶意软件检测智能体 Project Ire

开篇 在8月5号&#xff0c;微软研究院发布了一篇博客文章&#xff0c;在该篇博客中推出了一款名为Project Ire的AI Agent。该Agent可以在无需人类协助的情况下&#xff0c;自主分析和分类二进制文件。它可以在无需了解二进制文件来源或用途的情况下&#xff0c;对文件进行完全的…

哪些对会交由SpringBoot容器管理?

在 Spring Boot 中,交由容器管理的对象通常称为“Spring Bean”,这些对象的创建、依赖注入、生命周期等由 Spring 容器统一管控。以下是常见的会被 Spring Boot 容器管理的对象类型及识别方式: 一、通过注解声明的组件(最常见) Spring Boot 通过类级别的注解自动扫描并注…

Android POS应用在android运行常见问题及解决方案

概述 本文档记录了在Android POS应用开发过程中遇到的两个关键问题及其解决方案&#xff1a; UnsatisfiedLinkError: couldnt find "libnative.so" 错误ActivityNotFoundException 错误商户信息一致性检查绕过 问题1&#xff1a;UnsatisfiedLinkError - libnative.so…

基于SpringBoot的旅游网站系统

1. 项目简介 旅游线路管理系统是一个基于Spring Boot的在线旅游服务平台&#xff0c;提供旅游线路展示、分类、预订、订单管理等功能。系统包含前台用户界面和后台管理模块&#xff0c;支持用户注册登录、线路浏览、收藏、下单支付、客服咨询等核心功能。管理员可管理线路信息、…

CVPR 2025 | 机器人操控 | RoboGround:用“掩码”中介表示,让机器人跨场景泛化更聪明

点击关注gongzhonghao【计算机sci论文精选】1.导读1.1论文基本信息论文标题&#xff1a;ROBOGROUND: Robotic Manipulation with Grounded Vision-Language Priors作者&#xff1a;Haifeng Huang, Xinyi Chen, Hao Li&#xff0c; Xiaoshen Han, Yilun Chen, Tai Wang, Zehan W…

构建Node.js单可执行应用(SEA)的方法

如果为了降低部署复杂度&#xff0c;可以考虑使用vercel/ncc。除非有特别理由&#xff0c;不建议使用SEA。1. 环境准备1.1. 基础要求Node.js: > 19.0.0 (推荐最新LTS版本)1.2. 安装依赖npm install postject typescript1.3. 验证环境node -v # 确认版本 > 19 ts…

Java19 Integer 位操作精解:compress与expand《Hacker‘s Delight》(第二版,7.4节)

compress(int i, int mask) 这个方法是Java 19中新增的一个强大的位操作函数。compress 方法的核心功能可以理解为 “按位过滤和压缩” 。过滤 (Filter): 它使用 mask&#xff08;掩码&#xff09;作为过滤器。对于输入整数 i&#xff0c;只有那些在 mask 中对应位为 1 的比特才…

minio部署和双机热备

安装单机版MinIO&#xff08;准备2台机器A、B,A、B服务器操作一致&#xff09;切换目录并下载MinIO二进制文件cd /usr/local/bin wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio chmod x minio编辑配置文件vi /etc/default/minio.confMINIO_VOLUMES&quo…

【Java】 Java 21 革命性升级:虚拟线程与结构化并发的深度实践指南

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! Java 21 作为 Oracle JDK 的长期支持版本,引入了多项革命性特性,其中虚拟线程(Virtual Threads)和结构化并发(Structured Concurrency)尤为突出。这些特性旨在解决传统线程模型在高并发…

Apache IoTDB 全场景部署:基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DB+AI

Apache IoTDB 全场景部署&#xff1a;基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DBAI 文章目录Apache IoTDB 全场景部署&#xff1a;基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DBAIApache IoTDB 介绍Docker部署指导企业版数据库配套工具 WorkbenchTimechoDB&…

计算机网络---传输控制协议Transmission Control Protocol(TCP)

一、TCP的定位与核心特性 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是TCP/IP协议栈中传输层的核心协议&#xff0c;与UDP&#xff08;用户数据报协议&#xff09;共同承担端到端数据传输功能。其设计目标是在不可靠的IP网络上提供可靠…

week1-[分支嵌套]公因数

week1-[分支嵌套]公因数 题目描述 给定 444 个正整数 a,b,c,ka,b,c,ka,b,c,k。如果 a,b,ca,b,ca,b,c 都是 kkk 的倍数&#xff0c;那么称 kkk 是 a,b,ca,b,ca,b,c 的公因数。否则如果某两个数都是 kkk 的倍数&#xff0c;那么称 kkk 是这两个数的公因数。问 kkk 是哪些数的公因…

C#枚举/结构体讲一讲

先展示一段简单代码// 定义枚举 public enum thisday {吃饭,不吃 }// 定义结构体 public struct person {public string name;public int age;public thisday zhuangtai; // 使用枚举类型作为字段 }static void Main(string[] args) {// 创建结构体实例person thisperson;thisp…