jay*_*ayp 6 docker docker-compose
给定一个docker-compose.yml像下面这样的文件,我正在寻找一种既可以服务a又b可以访问由两个容器的合并内容组成的共享卷的方法。
version: '3'
volumes:
shared-merged-volume:
services:
a:
volumes:
- shared-merged-volume:/shared
b:
volumes:
- shared-merged-volume:/shared
Run Code Online (Sandbox Code Playgroud)
假设 servicea有一个目录 at/shared/dir-from-a并且 serviceb有一个类似的/shared-dir-from-b目录。想要的结果是:
$ ls /shared # from either container
dir-from-a
dir-from-b
Run Code Online (Sandbox Code Playgroud)
我发现其中一个容器“获胜”并且这两个目录中只有一个存在。我可以解决这样的问题,但更冗长,如果目录内容发生更改,则需要修改:
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
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
是否需要使用命名卷?
如果没有,那么为了完成这种合并,我通常只需将目录映射到主机驱动器上的一个位置,而不是使用卷,并且它可以毫无问题地合并。在大负载和多个容器同时写入上进行了测试。
建议的撰写文件:
version: '3'
volumes:
shared-merged-volume:
services:
a:
volumes:
- /location/on/host/system:/shared
b:
volumes:
- /location/on/host/system:/shared
Run Code Online (Sandbox Code Playgroud)
根据评论编辑
此方法将本地主机目录中的所有内容安装到/shared,这意味着如果它是空的 - 它将安装空目录,并且那里的任何内容 - 将被空目录覆盖。服务启动后,将在该安装中写入的所有内容都将按预期跨服务进行持久化和合并。
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |