如何使用docker compose v3在容器中直接挂载NFS共享/卷

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

我打算使用NFS服务器,以便单个NFS共享将直接安装在群集内的所有主机上。

我发现以下两种实现方法,但是它需要在Docker主机上执行额外的步骤-

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

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

有没有一种标准方法,我可以通过在Docker主机上执行很少/不需要任何步骤(我知道无论如何都需要“ nfs-common”软件包)来直接使用docker

compose v3来使用/挂载NFS共享?

回答:

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

最重要的是,您需要使用version: "3.2"或更高。如果没有的话,将会有奇怪而又不明显的错误。

第二个问题是,卷的定义更改时 自动更新。当您所做的更改尚未应用时,这会使您陷入困境,认为更改是不正确的。确保您docker rm

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:~#

将在运行堆栈的任何群集节点上创建( )该卷。

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:~#

以上是 如何使用docker compose v3在容器中直接挂载NFS共享/卷 的全部内容, 来源链接: utcz.com/qa/429704.html

回到顶部