我有一个带有 v3 的 compose 文件,其中有 3 个服务共享/使用相同的卷。在使用 swarm 模式时,我们需要创建额外的容器和卷来跨集群管理我们的服务。
我计划使用 NFS 服务器,以便将单个 NFS 共享直接安装在集群内的所有主机上。
我发现了以下两种方法,但它需要在 docker 主机上执行额外的步骤 -
在主机上使用“fstab”或“mount”命令挂载 NFS 共享,然后将其用作 docker 服务的主机卷。
使用 Netshare 插件 - https://github.com/ContainX/docker-volume-netshare
有没有一种标准方法,我可以通过在 docker 主机上只执行很少/不执行步骤(我知道无论如何都需要“nfs-common”包)来使用 docker compose v3 直接使用/挂载 NFS 共享?
原文由 vivekyad4v 发布,翻译遵循 CC BY-SA 4.0 许可协议
在发现这大量未记录后,这是使用堆栈和 docker compose 挂载 NFS 卷的正确方法。
最重要的是您需要使用
version: "3.2"
或更高版本。如果不这样做,您将遇到奇怪且不明显的错误。第二个问题是卷在其定义更改时 不会 自动更新。这可能会导致您陷入一个认为您的更改不正确的兔子洞,而这些更改尚未应用。确保您
docker rm VOLUMENAME
它可能存在的任何地方,就好像该卷存在一样,它不会被验证。第三个问题更多的是 NFS 问题 - 如果 NFS 文件夹不存在,则不会在服务器 上创建 它。这正是 NFS 的工作方式。在你做任何事情之前,你需要确保它存在。
(除非您确定自己知道自己在做什么,否则不要删除 ‘soft’ 和 ‘nolock’ - 如果您的 NFS 服务器消失,这会阻止 docker 冻结)
这是一个完整的例子:
现在,在 swarm-4 上:
该卷将在堆栈运行的任何 swarm 节点上创建( 但不会销毁)。