Docker 容器之间如何共享数据

3
我有三个 Docker 镜像,每个镜像都包含不同的数据集。我试图创建一个卷,然后将这三个数据集容器挂载到该卷上。然后绑定从另一个主要镜像创建的容器,并从同一位置(即主要镜像)使用这三个单独的数据集。
以下是这三个容器各自文件系统的样子:
container1: /datasets/xxx/01.jpg...
container2: /datasets/yyy/01.jpg...
container3: /datasets/zzz/01.jpg...

我的Docker命令流程如下:
docker volume create my-data
docker run -ti -d -v my-data:/datasets dataset/xxx:latest
docker run -ti -d -v my-data:/datasets dataset/yyy:latest
docker run -ti -d -v my-data:/datasets dataset/zzz:latest

最后,最重要的一个问题:
docker run -ti -v my-data:/datasets major-application/app:latest

在完成这些步骤后,在从 major-application 镜像创建的容器中运行 ls /datasets 命令,我只能看到 /datasets/xxx/01.jpg... 目录。同时,使用 --volumes-from 命令也没有解决问题。我错过了什么吗?

将数据集提取到新的映像中是否可能?你有用于构建 dataset/abc:latestDockerfile 副本吗? - masseyb
2个回答

2

那么将xxx、yyy和zzz文件夹挂载到不同的卷上怎么样:

例如:

docker run -ti -d -v my-data-xxx:/datasets/xxx dataset/xxx:latest
docker run -ti -d -v my-data-yyy:/datasets/yyy dataset/yyy:latest
docker run -ti -d -v my-data-zzz:/datasets/zzz dataset/zzz:latest

And then the major one:

docker run -ti -v my-data-xxx:/datasets/xxx -v my-data-yyy:/datasets/yyy -v my-data-zzz:/datasets/zzz major-application/app:latest

1
看起来这是我尝试做到的最实用的方法。谢谢! - doruk.sonmez

1
通过为容器命名并在不同的目录中挂载卷,您可以使用 --volumes-from 来从每个容器中挂载卷:
docker run --rm -it --name xxx -d -v xxx:/datasets/xxx dataset/xxx:latest
docker run --rm -it --name yyy -d -v yyy:/datasets/yyy dataset/yyy:latest
docker run --rm -it --name zzz -d -v zzz:/datasets/zzz dataset/zzz:latest
注意: 您无需明确create卷。
然后使用--volumes-fromdocker run --rm -it --volumes-from xxx --volumes-from yyy --volumes-from zzz ubuntu:18.04 ls -alF /datasets 如果数据集在镜像中是静态的(dataset/abc:latest),那么您可以通过数据集扩展major-application/app:latest镜像,例如Dockerfile:
FROM dataset/xxx:latest as xxx
FROM dataset/yyy:latest as yyy
FROM dataset/zzz:latest as zzz
FROM major-application/app:latest
VOLUME [/datasets]
COPY --from=xxx /datasets/xxx /datasets/xxx
COPY --from=yyy /datasets/yyy /datasets/yyy
COPY --from=zzz /datasets/zzz /datasets/zzz

1
非常感谢提供 Dockerfile 的部分。对于我之后将会使用 Dockerfile 进行的工作来说,这个答案更为合法。 - doruk.sonmez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接