我有一个v3的撰写文件,其中有3个服务共享/使用相同的卷 . 在使用swarm模式时,我们需要创建额外的容器和卷来管理整个群集中的服务 .
我打算使用NFS服务器,以便将单个NFS共享直接挂载到群集中的所有主机上 .
我在下面找到了两种方法,但它需要在docker主机上执行额外的步骤 -
-
在主机上使用“fstab”或“mount”命令挂载NFS共享,然后将其用作docker服务的主机卷 .
-
使用Netshare插件 - https://github.com/ContainX/docker-volume-netshare
有没有一种标准的方法,我可以使用docker compose v3直接使用/挂载NFS共享,只需执行少量/无步骤(我知道无论如何都需要“nfs-common”包)在docker主机上?
3 回答
我的AWS EFS解决方案有效:
Create EFS(别忘了在安全组中打开NFS端口2049)
安装nfs-common软件包:
sudo apt-get install -y nfs-common
ls -la efs-test-point/
是的,您可以直接从撰写文件中引用NFS:
以类似的方式,您可以在每个主机上创建一个nfs卷 .
在发现这是大量未记录的之后,这是使用堆栈和docker compose挂载NFS卷的正确方法 .
最重要的是你需要使用
version: "3.2"
或更高版本 . 如果不这样做,你会有奇怪和不明显的错误 .第二个问题是卷的定义发生变化时会自动更新 not . 这可能会导致你认为你的变化没有得到应用 . 确保你可能在任何地方
docker rm VOLUMENAME
,好像卷存在,它将不会被验证 .第三个问题更多的是NFS问题 - 如果NFS文件夹不存在,它将在服务器上 not be created . 这就是NFS的工作方式 . 在做任何事情之前,你需要确保它存在 .
(除非你确定你知道你在做什么,否则不要删除'soft'和'nolock' - 如果你的NFS服务器消失,这会阻止docker冻结)
这是一个完整的例子:
现在,在swarm-4上:
将在运行堆栈的任何swarm节点上创建此卷( but not destroyed ) .