docker - 在 Docker Swarm 的 docker-compose.yml 卷中挂载 OpenMediaVault NFS

标签 docker docker-compose docker-swarm nfs openmediavault

我正在尝试将应用程序中的运行时数据外部化,以保存在 OpenMediaVault 共享文件夹中。 我能够创建共享文件夹并配置 NFS,或者至少我这么认为。我在 OMV/Services/NFS/Shares 中看到的配置是:

Shared folder: NasFolder[on /dev/sda1, nas/]
Client: 192.168.50.0/24
Privelage: Read/Write
Extra options: subtree_check,insecure

现在在该共享文件夹中我有这个结构(我使用 Windows SMB/CIFS 配置检查了它)

\\nfs-ip\NasFolder
          |- mysql
          |   \- some my sql folders...
          |- TEST.txt

我想使用这个 mysql 文件夹来存储 MariaDB 运行时数据(我知道名称很困惑,我正在迁移到 Maria...)。并为其他服务创建一些其他文件夹。这是我来自 docker-compose.yml 的配置:

version: '3.2'
services:
  mysqldb:
    image: arm64v8/mariadb:latest
    ports:
      - 3306:3306
    restart: on-failure:3
    volumes:
      - type: volume
        source: nfs-volume
        target: /mysql
        volume:
          nocopy: true
    environment:
      - MYSQL_ROOT_PASSWORD=my-secret-pw
    command: --character-set-server=utf8 --collation-server=utf8_general_ci

volumes:
  nfs-volume:
    driver: local
    driver_opts:
      type: "nfs"
      o: addr=192.168.50.70,nolock,soft,rw
      device: ":/NasFolder"

现在,当我在管理器节点上运行 docker stack deploy -c docker-compose.yml --with-registry-auth maprealm 时,我在 maprealm_mysqldb.1 上收到错误看起来像这样:

"Err": "starting container failed: error while mounting volume '/var/lib/docker/volumes/maprealm_nfs-volume/_data': failed to mount local volume: mount :/NasFolder:/var/lib/docker/volumes/maprealm_nfs-volume/_data, data: addr=192.168.50.70,nolock,soft: permission denied",

我对集成方面还很陌生。这是我的家庭服务器,我只是找不到好的教程来“通过我厚厚的头骨”如何配置这些 NFS 路径和​​权限,或者至少除了收到此错误之外如何调试它。我知道 volumes.nfs-volume.driver_opts.device 应该是一条路径,但我不确定那应该是什么路径。 我试图从这里调整配置:https://gist.github.com/ruanbekker/4a9c0d250bce9f84482f2a788ce92131

编辑1)一些额外的细节:

  • Docker swarm 有 3 个节点,只有一个节点是管理节点,且可用性暂停。
  • OMV 正在不属于集群的独立计算机上运行

最佳答案

好吧,如果有人正在寻找解决方案:

  1. OMV 默认情况下具有用于 NFS 的 /export/,因此需要更新卷。我需要更新 mysql 的卷并更新 volumes.mysql-volume.driver_opts.device 以包含 /export/ 前缀,并且我还添加了 mysql< 的路径 文件夹具有仅供 mysqldb 服务使用的卷:
volumes:
  mysql-volume:
    driver: local
    driver_opts:
      type: "nfs"
      o: addr=192.168.50.70,nolock,soft,rw
      device: ":/export/NasFolder/mysql"
  • 进行这些更改后,需要更新 mysql/mariadb 上的卷配置:
  •   mysqldb:
        image: arm64v8/mariadb:latest
        ports:
          - 3306:3306
        restart: on-failure:3
        volumes:
          - type: volume
            source: mysql-volume
            target: /var/lib/mysql
            volume:
              nocopy: true
        environment:
          - MYSQL_ROOT_PASSWORD=my-secret-pw
        command: --character-set-server=utf8 --collation-server=utf8_general_ci
    

    mysqldb.volumes.source 指向步骤 1 中定义的卷的名称 - mysql-volume mysqldb.volumes.target 是容器内部运行时数据的存储位置。在 mysql/mariadb 数据库中,运行时数据存储在 /var/lib/mysql 中,因此您想指向它,并且只能使用完整路径。

  • 由于我使用默认的 OMV 配置,因此存在权限问题。因此,我将 OMV/Services/NFS/Shares 更新为:
  • Shared folder: NasFolder[on /dev/sda1, nas/]
    #here you can see note 'The location of the files to share. The share will be accessible at /export/.'
    Client: 192.168.50.0/24
    Privelage: Read/Write
    Extra options: rw,sync,no_root_squash,anonuid=1000,anongid=1000,no_acl
    

    关于docker - 在 Docker Swarm 的 docker-compose.yml 卷中挂载 OpenMediaVault NFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71133611/

    相关文章:

    docker - VPN可扩展性测试客户端设置的问题

    docker - 当运行多个部署时,Kubernetes是否会受到Docker Swarm随机获得的 “update out of sequence”错误的困扰?

    python - 无法从同一 docker swarm 上运行的其他服务连接到 postgres 服务?

    mongodb - 无法使用 mongo 连接到 docker 容器

    docker - 云代工规模

    docker - 如何在Docker容器上应用内核调整

    php - Docker容器的网关Nginx错误

    docker - 无法从 root 构建 docker

    postgresql - Docker化游戏框架

    docker - 如何使用动态 IP 在 Windows 7(作为单节点)上初始化群