命名卷(Named Volume)是容器间文件共享的首选方式,通过docker volume create创建并由Docker统一管理存储路径,多个容器挂载同名卷即可实时共享同一份数据;绑定挂载则适用于开发调试,直接映射宿主机绝对路径实现共享;跨节点需结合NFS与本地卷驱动;volumes-from已属遗留方案。

容器间文件共享的核心是让多个容器访问同一份底层数据,而不是各自维护独立副本。关键不在于“复制文件”,而在于“指向同一个存储位置”。下面分几种典型场景说明实用做法。
用命名卷(Named Volume)实现同主机多容器共享
这是最常用、最推荐的本地共享方式。Docker 会自动管理卷的存储路径,容器只需挂载同名卷即可读写相同数据:
- 创建一个命名卷:docker volume create shared-data
- 启动第一个容器并挂载:docker run -d --name app1 -v shared-data:/app/data nginx
- 启动第二个容器,挂载同一个卷:docker run -d --name app2 -v shared-data:/data nginx
- 两个容器对 /app/data 或 /data 的修改,都会实时反映在对方可见的同一份数据上
用绑定挂载(Bind Mount)共享宿主机目录
适合开发调试或需要直接操作宿主机路径的场景。所有挂载该路径的容器,实际都在读写宿主机上的同一个文件夹:
- 确保宿主机存在目标目录,例如:mkdir -p /srv/shared-configs
- 启动容器时指定挂载:docker run -v /srv/shared-configs:/etc/config my-app
- 多个容器都挂载 /srv/shared-configs,就自然共享其中内容
- 注意:路径必须是绝对路径;宿主机目录不存在时 Docker 会自动创建
跨节点共享:NFS + 本地卷组合方案
当容器分布在不同物理机(多 Docker 主机)时,需借助网络存储。NFS 是成熟稳定的选择,但 Docker volume 不直接“原生支持” NFS,而是通过两步实现:
- 在每台宿主机上手动挂载 NFS 到本地固定路径,例如:sudo mount -t nfs -o vers=4.1,hard,intr 192.168.1.100:/exports/shared /mnt/nfs-shared
- 再基于该本地路径创建 Docker volume:docker volume create --driver local --opt type=none --opt device=/mnt/nfs-shared --opt o=bind nfs-vol
- 各节点都执行相同命令(volume 名一致),然后容器挂载 nfs-vol,就等效于全部连向同一 NFS 后端
- 务必配置 /etc/fstab 实现开机自动挂载,避免重启后 volume 失效
用 volumes-from(已不推荐,仅作了解)
旧版方案,通过一个“数据容器”中转共享。虽仍可用,但已被命名卷完全替代:
- 创建仅用于挂载的容器:docker create --name data-container -v /data busybox
- 其他容器通过 --volumes-from 引用:docker run --volumes-from data-container nginx
- 问题明显:依赖容器生命周期;无法跨主机;管理复杂;Docker 官方已标记为 legacy


















