docker volume container 通过专用容器挂载数据卷并用 --volumes-from 共享,适用于遗留场景;推荐优先使用命名卷(docker volume create)以提升可管理性与可移植性。

使用 Docker Volume Container 实现容器间数据共享,核心是通过一个专门用于挂载数据卷的“容器”(即 volume container),让其他容器通过 --volumes-from 复用其挂载点。这种方式在 Docker 早期较常见,虽然后续推荐直接使用命名卷(named volumes),但在某些遗留场景或需精细控制挂载路径时仍有实用价值。
创建专用的 Volume Container
Volume Container 本身不运行实际应用,只负责声明和持有数据卷。它通常基于轻量镜像(如 alpine 或 busybox)启动,并通过 -v 指定挂载路径:
- 运行命令示例:
docker run -d --name data-container -v /data alpine sleep infinity - 这里
/data是该容器内被挂载的路径,Docker 会自动创建匿名卷并绑定到该路径 - 容器保持运行状态(用
sleep infinity防止退出),才能被其他容器引用
让其他容器挂载同一份数据
使用 --volumes-from 参数,使新容器继承 volume container 的所有挂载卷:
- 例如启动 Web 容器共享数据:
docker run -d --name web-app --volumes-from data-container -v /app nginx - 此时
web-app容器中也会有/data目录,且与data-container实际指向同一块存储空间 - 多个容器可同时使用
--volumes-from data-container,实现读写共享(注意并发写入需应用层协调)
查看和管理共享数据
可通过 inspect 查看 volume container 的挂载详情,确认实际卷路径:
- 运行
docker inspect data-container,在Mounts字段中找到Source(宿主机路径)和Destination(容器内路径) - 若需备份数据,可运行临时容器挂载该 volume:
docker run --rm -v /backup:/backup --volumes-from data-container alpine tar czf /backup/data-backup.tar.gz /data - 删除 volume container 前,确保没有其他容器依赖它;否则应先停止并移除所有依赖容器
注意事项与替代建议
Volume Container 方式存在维护成本高、生命周期耦合强等问题:
- 它不是真正意义上的“无状态”,容器退出或误删会导致数据访问中断
- Docker 推荐优先使用命名卷:
docker volume create mydata,再通过-v mydata:/data挂载,更清晰、易管理、支持备份迁移 - 若需跨主机共享,应结合 NFS、云存储或分布式文件系统,而非依赖单机 volume container











