如何在多个容器间挂载Docker共享卷?附操作命令示例
实现Docker多容器共享卷挂载的正确方法
你的命令格式存在小问题,咱们一步步来搞定多容器共享卷的需求:
1. 先明确命令错误的原因
你用的--mount shared:/app写法不符合Docker的语法规范,--mount参数需要明确指定类型、源和目标,正确格式是type=volume,source=卷名称,target=容器内路径。如果想用更简洁的写法,应该用-v参数替代--mount。
2. 具体实现步骤
方法一:显式创建共享卷(推荐,逻辑更清晰)
首先创建一个由Docker管理的共享卷:
docker volume create shared
然后启动第一个容器并挂载这个卷(用sleep infinity让容器保持运行状态,避免Ubuntu镜像默认启动后立即退出):
docker run -d --name container1 --mount type=volume,source=shared,target=/app ubuntu:latest sleep infinity
接着启动第二个容器,同样挂载这个shared卷:
docker run -d --name container2 --mount type=volume,source=shared,target=/app ubuntu:latest sleep infinity
方法二:启动容器时自动创建卷
你也可以不用提前手动创建卷,Docker会在第一次挂载时自动帮你创建:
# 启动第一个容器 docker run -d --name container1 -v shared:/app ubuntu:latest sleep infinity # 启动第二个容器 docker run -d --name container2 -v shared:/app ubuntu:latest sleep infinity
这里的-v shared:/app是更简洁的写法,功能等价于--mount type=volume,source=shared,target=/app。
3. 验证共享效果
咱们来测试一下两个容器是否能真正共享数据:
- 在第一个容器内创建一个测试文件:
docker exec container1 touch /app/shared_test.txt
- 到第二个容器内查看该文件是否存在:
docker exec container2 ls /app
你会看到shared_test.txt已经出现在第二个容器的/app目录下,这就说明卷共享成功了。
4. 后续清理(可选)
如果不再需要这些容器和卷,可以按以下步骤删除:
# 先删除运行中的容器 docker rm -f container1 container2 # 再删除共享卷 docker volume rm shared
这种由Docker管理的卷是多容器共享数据的最佳实践之一,它由Docker负责存储位置的管理,能避免主机目录挂载可能遇到的权限、跨平台路径适配等问题。
内容的提问来源于stack exchange,提问作者user9234310
相关产品推荐
相关产品推荐

