6

给定一个docker-compose.yml像下面这样的文件,我正在寻找一种既可以服务ab可以访问由两个容器的合并内容组成的共享卷的方法。

version: '3'
volumes:
   shared-merged-volume:
services:
   a:
     volumes:
       - shared-merged-volume:/shared
   b:
     volumes:
       - shared-merged-volume:/shared

假设服务a有一个目录,/shared/dir-from-a服务b有一个类似的/shared-dir-from-b目录。期望的结果是最终得到:

$ ls /shared # from either container
dir-from-a
dir-from-b

我发现其中一个容器“获胜”并且这两个目录中只有一个存在。我可以像这样解决这个问题,但更冗长,如果目录内容发生变化,则需要修改:

version: '3'
volumes:
   service-a-shared-volume:
   service-b-shared-volume:
services:
   a:
     volumes:
       - service-a-shared-volume:/shared/dir-from-a
       - service-b-shared-volume:/shared/dir-from-b
   b:
     volumes:
       - service-a-shared-volume:/shared/dir-from-a
       - service-b-shared-volume:/shared/dir-from-b

提前感谢您的帮助!

4

1 回答 1

0

是否需要使用命名卷?

如果不是,那么为了完成这样的合并,我通常只是将目录映射到主机驱动器上的一个位置,而不是使用卷,并且合并没有问题。在大负载和同时写入的多个容器上进行了测试。

建议撰写文件:

version: '3'
volumes:
   shared-merged-volume:
services:
   a:
     volumes:
       - /location/on/host/system:/shared
   b:
     volumes:
       - /location/on/host/system:/shared

从评论编辑

此方法将本地主机目录中的所有内容挂载到/shared,这意味着如果它为空 - 它将挂载空目录,并且那里的任何内容 - 都将被空目录覆盖。服务启动后将写入该挂载中的所有内容都将按预期在服务之间持久化和合并。

于 2018-05-18T19:46:15.040 回答