如何使用docker撰写v3直接在容器中安装NFS共享/卷

我有一个合成文件v3共有3个服务共享/使用相同的音量。 在使用群集模式时,我们需要创建额外的容器和卷来管理群集中的服务。

我打算使用NFS服务器,以便单个NFS共享将直接挂载到群集中的所有主机上。

我在下面找到了两种做法,但是需要在docker主机上执行额外的步骤 –

  • 在主机上使用“fstab”或“mount”命令挂载NFS共享,然后将其用作Docker服务的主机卷。

  • 使用Netshare插件 – https://github.com/ContainX/docker-volume-netshare

有没有一个标准的方式,我可以直接使用/装载NFS共享使用泊坞窗撰写V3通过执行只有很少/没有步骤(我明白,“nfs-common”包是必需的)在码头主机?

是的,您可以直接从撰写文件引用NFS:

volumes: db-data: driver: local driver_opts: type: nfs o: addr=$SOMEIP,rw device: "$PathOnServer" 

以类似的方式,您可以在每台主机上创建一个nfs卷。

 docker volume create --driver local --opt type=nfs --opt o=addr=$SomeIP,rw --opt device=:$DevicePath --name nfs-docker 

在发现这是大量未记录的文件之后,下面是使用堆栈和docker撰写挂载NFS卷的正确方法。

最重要的是你需要使用version: "3.2"或更高。 如果你不这样做,你会有奇怪的和不明显的错误。

第二个问题是卷的定义更改时不会自动更新。 这可能会导致你陷入一个兔子洞,认为你的变化是不正确的,当他们没有被应用。 确保你的docker rm VOLUMENAME可能在任何地方,就好像卷存在一样,它不会被验证。

第三个问题是更多的NFS问题 – NFS文件夹不会在服务器上创建 ,如果它不存在。 这只是NFS的工作方式。 在做任何事情之前,你需要确定它的存在。

(不要删除'soft'和'nolock',除非你确定你知道你在做什么 – 这会阻止docker冻结,如果你的NFS服务器消失了)

这是一个完整的例子:

 [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,nolock,soft,rw", "type": "nfs" }, "Scope": "local" } ] root@swarm-4:~# 
Interesting Posts