Docker 在容器之间共享数据

Docker Share Data Between Containers

我有 3 张 docker 图像,每一张都包含不同的数据集。我正在尝试创建一个卷,然后将这 3 个数据集容器安装到该卷。然后绑定一个从另一个主要图像创建的容器,并使用来自同一位置(这是主要图像)的这 3 个独立数据集。

这三个容器的文件系统如下所示:

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

完成这些步骤后,当我在从主要应用程序映像创建的容器中执行 ls /datasets 时,我只看到 /datasets/xxx/01.jpg... 目录。 --volumes-from 命令也没有运气。我在这里错过了什么?

像这样将 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

然后是主要的:

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

命名您的容器并在不同的目录安装卷,您可以使用 --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