我有一个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主机上?
最佳答案
在发现这是大量未记录的之后,这是使用堆栈和docker compose挂载NFS卷的正确方法.
原文链接:https://www.f2er.com/docker/437136.html最重要的是你需要使用版本:“3.2”或更高版本.如果不这样做,你会有奇怪和不明显的错误.
第二个问题是,当定义更改时,卷不会自动更新.这可能会导致您认为您的更改不正确,当他们尚未应用时,就会陷入困境.确保你可以在任何地方停靠rpm VOLUMENAME,就像卷存在一样,它将不会被验证.
第三个问题更多的是NFS问题 – 如果NFS文件夹不存在,则不会在服务器上创建该文件夹.这就是NFS的工作方式.在做任何事情之前,你需要确保它存在.
(除非你确定你知道你在做什么,否则不要删除’soft’和’nolock’ – 如果你的NFS服务器消失,这会阻止docker冻结)
这是一个完整的例子:
[root@docker docker-mirror]# cat nfs-compose.yml
version: "3.2"
services:
rsyslog:
image: jumanjiman/rsyslog
ports:
- "514:514"
- "514:514/udp"
volumes:
- type: volume
source: example
target: /nfs
volume:
nocopy: true
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
[root@docker docker-mirror]# docker stack deploy --with-registry-auth -c nfs-compose.yml rsyslog
Creating network rsyslog_default
Creating service rsyslog_rsyslog
[root@docker docker-mirror]# docker stack ps rsyslog
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tb1dod43fe4c rsyslog_rsyslog.1 jumanjiman/rsyslog:latest swarm-4 Running Starting less than a second ago
[root@docker docker-mirror]#
现在,在swarm-4上:
root@swarm-4:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d883e0f14d3f jumanjiman/rsyslog:latest "rsyslogd -n -f /e..." 6 seconds ago Up 5 seconds 514/tcp,514/udp rsyslog_rsyslog.1.tb1dod43fe4cy3j5vzsy7pgv5
root@swarm-4:~# docker exec -it d883e0f14d3f df -h /nfs
Filesystem Size Used Available Use% Mounted on
:/docker/example 7.2T 5.5T 1.7T 77% /nfs
root@swarm-4:~#
将在运行堆栈的任何swarm节点上创建(但不销毁)此卷.
root@swarm-4:~# docker volume inspect rsyslog_example
[
{
"CreatedAt": "2017-09-29T13:53:59+10:00","Driver": "local","Labels": {
"com.docker.stack.namespace": "rsyslog"
},"Mountpoint": "/var/lib/docker/volumes/rsyslog_example/_data","Name": "rsyslog_example","Options": {
"device": ":/docker/example","o": "addr=10.40.0.199,rw","type": "nfs"
},"Scope": "local"
}
]
root@swarm-4:~#