当有多个Docker 容器需要进行跨Docker的数据共享、交换,主要方案分为网络通信(结构化 / 实时数据)和文件共享(文件 / 目录级)两大类,以下按推荐优先级整理常用方案及操作示例。
一、网络通信(服务间实时交互首选)
最符合容器化设计的标准方案,适合 API 调用、数据库连接、消息传输等结构化、高频实时数据交互。
原理:容器拥有独立网络命名空间,加入同一个自定义桥接网络后,可直接通过「容器名 + 服务端口」互相访问,无需将端口暴露到宿主机。
操作示例:
创建自定义桥接网络
docker network create app-net两个容器加入同一网络
# 容器A(后端服务) docker run -d --name backend --network app-net 你的后端镜像 # 容器B(前端/客户端),内部直接通过容器名 backend 访问容器A docker run -d --name frontend --network app-net 你的前端镜像特点:解耦性强、支持跨主机(overlay 网络),是微服务架构的标准方案。

二、共享 Docker Volume(文件级共享首选)
多个容器挂载同一个 Docker 托管卷,实现文件 / 目录的读写共享,性能和可移植性优于宿主机绑定挂载。
原理:Volume 由 Docker 统一管理,生命周期独立于容器;多个容器同时挂载到各自内部路径,数据实时同步。
操作示例:
创建命名共享卷
docker volume create shared-data两个容器同时挂载该卷
# 容器1写入数据 docker run -d --name container1 -v shared-data:/data 镜像1 # 容器2读取同一份数据 docker run -d --name container2 -v shared-data:/app/files 镜像2适用场景:共享配置文件、上传附件、日志收集、静态资源;支持并发读,并发写需自行加锁避免文件损坏。
三、绑定挂载宿主机目录
将宿主机上的同一个目录,分别挂载到两个容器内部,适合需要宿主机直接干预文件的开发场景。
操作示例:
# 宿主机共享目录 /opt/shared,同时挂载到两个容器
docker run -d --name c1 -v /opt/shared:/data 镜像1
docker run -d --name c2 -v /opt/shared:/data 镜像2
特点:配置简单、宿主机可直接编辑文件;但依赖宿主机目录结构,可移植性差,不推荐生产环境使用。
四、临时文件传输:docker cp
仅适合一次性、临时的文件拷贝,不支持实时 / 频繁交互。
操作流程:先从容器 A 拷到宿主机,再从宿主机拷到容器 B
# 容器A → 宿主机
docker cp containerA:/容器内路径/文件 /宿主机路径/
# 宿主机 → 容器B
docker cp /宿主机路径/文件 containerB:/容器内路径/

五、数据卷容器(经典旧方案)
专门创建一个不运行业务的「数据卷容器」,其他容器通过 --volumes-from 继承挂载点,用于集中管理共享卷。
操作示例:
# 创建纯数据容器(不运行业务)
docker create --name data-container -v shared-data:/data busybox
# 两个业务容器继承挂载
docker run -d --volumes-from data-container --name app1 镜像1
docker run -d --volumes-from data-container --name app2 镜像2
说明:目前已被命名卷(Named Volume)替代,仅兼容旧版本 Docker 时使用。
补充注意事项
并发写风险:文件共享类方案中,多容器同时写入同一文件可能导致数据损坏,建议单写多读或引入文件锁。
权限问题:不同容器的运行用户 UID 可能不同,共享目录易出现权限不足,需统一 UID 或预先设置目录权限。
跨主机交互:容器不在同一台宿主机时,业务数据优先走网络 API / 消息队列;文件共享可配合 NFS、分布式存储(如 MinIO)。
结构化业务数据:优先通过网络 + 数据库 / 缓存交互,不建议用共享文件承载业务数据。
原文链接
欢迎访问 小易撩挨踢