在 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",
我对集成的东西还很陌生。这是我的家庭服务器,我找不到好的教程 'get through my thick skull' 如何配置这些 NFS 路径和权限,或者至少除了收到此错误之外我如何调试它。我知道 volumes.nfs-volume.driver_opts.device
应该是一条路径,但我不确定那应该是什么路径。
我试图从这里调整配置:https://gist.github.com/ruanbekker/4a9c0d250bce9f84482f2a788ce92131
编辑 1) 一些额外的细节:
- Docker swarm 有 3 个节点,只有一个节点是管理器,可用性暂停。
- OMV 运行在不属于集群的单独机器上运行
好的,如果有人正在寻找解决方案:
- 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
我正在尝试将我的 运行 时间数据从我的应用程序外部化以保存在 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",
我对集成的东西还很陌生。这是我的家庭服务器,我找不到好的教程 'get through my thick skull' 如何配置这些 NFS 路径和权限,或者至少除了收到此错误之外我如何调试它。我知道 volumes.nfs-volume.driver_opts.device
应该是一条路径,但我不确定那应该是什么路径。
我试图从这里调整配置:https://gist.github.com/ruanbekker/4a9c0d250bce9f84482f2a788ce92131
编辑 1) 一些额外的细节:
- Docker swarm 有 3 个节点,只有一个节点是管理器,可用性暂停。
- OMV 运行在不属于集群的单独机器上运行
好的,如果有人正在寻找解决方案:
- 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