簡體   English   中英

在 docker-compose.yml 卷中為 Docker Swarm 安裝 OpenMediaVault NFS

[英]Mount OpenMediaVault NFS in docker-compose.yml volume for Docker Swarm

我正在嘗試將我的運行時數據從我的應用程序外部化以保存在 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 volumes.mysql-volume.driver_opts.device 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"
  1. 在這些更改之后,需要更新 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中,因此您想要指向它並且只能使用完整路徑。

  1. 由於我使用默認的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM