gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:44:52 26 4
gpt4 key购买 nike

我有一个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:~#

    将在运行堆栈的任何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:~#

    关于docker - 如何使用Docker Compose v3直接在容器中挂载NFS共享/卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64138567/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com