-v或--volume挂载是宿主机与容器数据共享最直接方式,分绑定挂载(开发首选,路径可控)和命名卷(生产推荐,Docker自动管理),需注意路径存在、权限匹配、只读设置、平台共享配置及SELinux标签等细节。

用 -v 或 --volume 挂载目录,是实现宿主机与容器数据共享最直接有效的方式。核心在于让容器内路径和宿主机上某目录建立双向实时映射,改一边,另一边立刻可见,且容器删了数据不丢。
绑定挂载:开发调试首选
适合需要直接编辑宿主机文件、复用现有目录结构的场景,路径完全可控。
- 先在宿主机创建好目标目录,例如:
mkdir -p /home/user/app-data - 运行容器时指定挂载关系:
docker run -d --name myapp -v /home/user/app-data:/app/data nginx - 验证是否生效:在宿主机写入
echo "hello" > /home/user/app-data/test.txt,再进容器执行cat /app/data/test.txt,内容一致即成功 - 注意:宿主机路径必须存在(Docker 不会自动创建父级目录),权限需匹配(如容器以非 root 用户运行,宿主机目录需对其开放读写)
命名卷:生产环境推荐
由 Docker 自动管理存储位置,路径解耦、迁移性强,适合数据库、日志等需长期保留的数据。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 创建命名卷:
docker volume create app-storage - 启动容器挂载:
docker run -d --name db -v app-storage:/var/lib/postgresql/data postgres - 查看实际路径:
docker volume inspect app-storage,重点关注Mountpoint字段(通常是/var/lib/docker/volumes/app-storage/_data) - 多个容器可共用同一命名卷,实现配置分发或日志汇总等协作场景
挂载时的实用细节
挂载不是简单“连通”,有些关键点容易踩坑:
- 挂载后,容器内目标目录原有的文件会被隐藏,内容以宿主机或卷中实际内容为准(仅首次挂载空卷时,镜像内对应目录内容会复制进去)
- 加
:ro可设为只读,例如-v /host/conf:/etc/app:ro,防止容器意外修改关键配置 - Windows 或 macOS 使用 Docker Desktop 时,宿主机路径需在 Docker 设置中提前共享(如把
C:\mydata加入 File Sharing 列表) - SELinux 启用时,绑定挂载可能失败,可加
:z或:Z标签自动调整上下文,例如-v /srv/data:/data:z
验证与维护小技巧
确认挂载是否生效、数据是否真正同步,靠几个命令就能快速判断:
- 查挂载情况:
docker inspect 容器名 | jq '.[0].Mounts'(或用docker inspect 容器名手动翻找 Mounts 字段) - 进容器看目录权限和内容:
docker exec -it 容器名 ls -l /挂载路径 - 备份命名卷数据:
docker run --rm -v app-storage:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data . - 清理不用的卷:
docker volume prune(慎用,会删除所有未被容器使用的卷)

















