如何解决手动安装的NFS卷已挂载,但内容为空
服务器:docker ubuntu,18.06.3-ce
本地:docker for mac,19.03.13
我已经在群集中手动创建了一个卷到远程nfs服务器。当我尝试将此卷挂载到服务中时,它似乎可以工作,但是内容为空,并且所有写入 seem 都成功(调用代码不会崩溃),但是字节不见了。甚至是/ dev / null。
当我在compose文件中声明一个类似的卷时,它起作用了。我可以找到的唯一区别是标签“ com.docker.stack.namespace”。
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=10.0.1.100 \
--opt device=:/data/ \
my_nfs
version: "3.5"
services:
my-api:
volumes:
- "compose_nfs:/data1/" # works fine
- "externl_nfs:/data2/" # empty contents,forgotten writes
volumes:
externl_nfs:
external: true
compose_nfs:
driver: local
driver_opts:
type: nfs
o: addr=10.0.1.100
device: ":/data/"
在检查网络时,除了该标签外,它们是相同的。
{
"CreatedAt": "2020-20-20T20:20:20Z","Driver": "local","Labels": {
# label missing on the manually created one
"com.docker.stack.namespace": "stackie"
},"Mountpoint": "/var/lib/docker/volumes/externl_nfs/_data","Name": "compose_nfs","Options": {
"device": ":/data/","o": "addr=10.0.1.100","type": "nfs"
},"Scope": "local"
}
解决方法
对此进行回答,因为它是docker的较旧版本,考虑到NFS部分,可能与大多数人无关。
似乎是docker / swarm中的某种错误。
- 在群集上(通过api,从远程)创建NFS卷
- 已联系的管理器节点上的音量正确
- 所有其他工作节点上的卷都缺少
options
作为一些奇怪的副作用,该音量似乎有效。它可以被安装,写入成功而没有问题,但是写入的所有字节都消失了。可以读取工作,但每个文件都“未找到”,考虑到写入消失,这是合乎逻辑的。
在管理员上:
> docker network inspect external_nfs
[{
"CreatedAt": "2020-11-03T15:56:44+01:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/externl_nfs/_data","Name": "externl_nfs","Options": {
"device": ":/data/","o": "addr=10.0.1.100","type": "nfs"
},"Scope": "local"
}]
关于工作人员:
> docker network inspect external_nfs
[{
"CreatedAt": "2020-11-03T16:22:16+01:00","Options": null,"Scope": "local"
}]
,
如果您使用外部卷,则swarm会将创建该卷的时间推迟给您。卷在创建它们的节点上也是本地的,因此您必须在swarm可以调度此作业的每个节点上创建该卷。因此,许多人会将卷创建委托给本身的群集模式,然后将定义放入撰写文件中。因此,在您的示例中,在安排服务之前,在每个节点上 运行:
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=10.0.1.100 \
--opt device=:/data/ \
external_nfs
否则,当服务在未定义卷的节点上调度时,似乎swarm将创建容器,并且create命令将生成一个默认的命名卷,将内容存储在该本地节点上(我也可以看到swarm由于缺少卷而无法安排服务,但您的示例显示为其他)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。