2017-07-24 173 views
1

我有一个包含3个共享/使用相同卷的服务的v3撰写文件。在使用群集模式时,我们需要创建额外的容器来管理群集中的服务。如何使用docker撰写v3直接在容器中安装NFS共享/卷

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

我发现下面做这件事的两个方面,但它需要在泊坞窗主机上执行额外的步骤 - NFS共享使用“fstab文件”或“安装”命令的主机&上

是否有一个地方,我可以直接使用/挂载NFS共享使用泊坞窗撰写V3通过执行只有少数的标准方式/任何措施(据我所知,“NFS-常见“包是必需的)在码头主机?

回答

1

是的,你可以直接从撰写文件中引用的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 
+0

请不要忘记':'in'device:“:$ PathOnServer'' – MaxiReglisse

+0

谢谢你指出,我把它添加到答案中更清楚。 – herm

3

发现,这是大量无证之后,这里的安装使用堆栈和码头工人撰写一个NFS卷的正确方法。

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

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

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

(不要删除“软”和“NOLOCK”,除非你确定你知道你在做什么 - 这将停止搬运工冻结,如果你的NFS服务器消失)

这里有一个完整的例子:现在

[[email protected] 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" 



[[email protected] docker-mirror]# docker stack deploy --with-registry-auth -c nfs-compose.yml rsyslog 
Creating network rsyslog_default 
Creating service rsyslog_rsyslog 
[[email protected] 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 
[[email protected] docker-mirror]# 

,上群-4:

[email protected]:~# 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 
[email protected]:~# docker exec -it d883e0f14d3f df -h /nfs 
Filesystem    Size  Used Available Use% Mounted on 
:/docker/example   7.2T  5.5T  1.7T 77% /nfs 
[email protected]:~# 

该体积将被创建(但不被破坏)任何群节点上的S大头贴正在运行。

[email protected]:~# 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" 
    } 
] 
[email protected]:~# 
+1

我正在使用NFS和compose v3.1。你认为什么类型的问题? 由于使用soft和nolock,可能的数据损坏怎么样?这些不应该在你的面前解决? – herm

+0

@herm也许xrobau讲的是与同一个nfs服务器交谈的多个副本。 – Galigator

+0

'软'让IO中断。 'nolock'可让flock()调用始终成功。如果你依靠flock()与NFS上的多个用户,你*显着*放慢你的磁盘IO,你应该重新设计你的应用程序。 – xrobau