docker volume nfs 权限被拒绝

Posted

技术标签:

【中文标题】docker volume nfs 权限被拒绝【英文标题】:docker volume nfs permission denied 【发布时间】:2018-03-27 15:23:08 【问题描述】:

我撞墙了:(

我尝试在 docker 中使用 NFS 卷通过 docker swarm 共享/访问容器状态数据。但是我已经无法创建工作卷了。 我阅读了很多 SO 线程、docker 文档等。

据我所知,至少有两种方法可以完成这项工作。内置 docker volume 和外部 docker-volume 驱动程序。我更喜欢使用docker volume

我使用一台 FreeBSD 机器作为 NFS 服务器,使用两个 ubuntu 客户端作为 docker 节点。我创建了 NFS 共享并将其手动安装在 ubuntu 机器上:

mount -o v3 -t nfs 10.0.0.108:/usr/srv/docker/registry /mnt
mount | grep nfs
    10.0.0.108:/usr/srv/docker on /mnt type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.108,mountvers=3,mountport=794,mountproto=udp,local_lock=none,addr=10.0.0.108)

到目前为止一切顺利。现在我尝试创建一个 docker 卷:

docker volume create \
    --driver local \
    --opt type=nfs \
    --opt device=:/usr/srv/docker/registry \
    --opt "o=addr=10.0.0.108,vers=3,rw" 
    registry

这里我尝试了"o=...."的几个版本。

Docker 在创建卷时返回成功...或者它只是写卷名,没有任何注释:)

下一步:测试音量:

docker run --rm -i -v=registry:/tmp/myvolume busybox ls -lA /tmp/myvolume

那是错误“堆积”的时刻。

在 NFS 服务器上:

Mar 27 17:17:51 $host mountd[1002]: mount request denied from 10.0.0.106 for /usr/srv/docker/registry

在 docker 节点上:

docker: Error response from daemon: 
 error while mounting volume '/var/lib/docker/volumes/registry/_data': 
  error while mounting volume with options: 
   type='nfs' device=':/usr/srv/docker/registry' o='addr=10.0.0.108,vers=3,mountaddr=10.0.0.108,mountvers=3': 
    permission denied.

据我了解文档permission denied 是内核/nfs 客户端的输出。但我不明白为什么会这样。

有什么建议吗?

谢谢!

编辑: 使用的 Docker 版本是:

Docker version 17.12.1-ce, build 7390fc6

【问题讨论】:

你用的是哪个版本的docker?? 我添加了版本,谢谢@AddWebSolutionPvtLtd 需要为 NFS 服务器打开端口 111(TCP 和 UDP)和 2049(TCP 和 UDP)。检查您机器上的防火墙规则。 【参考方案1】:

在 FreeBSD 服务器上,您必须允许挂载文件系统。

检查您的挂载点:

mount

然后编辑或创建 /etc/exports 文件:

# if /usr/srv/docker/registry is a moutpoint 
/usr/srv/docker/registry -network 10.0.0.0 -mask 255.0.0.0
# if /usr/srv/docker/registry is a direcoty under /usr
/usr -alldirs -network 10.0.0.0 -mask 255.0.0.0

如果您使用 ZFS,您还可以使用“zfs”激活共享,请参阅手册页。

【讨论】:

感谢您的回答,但是可以安装,只有 docker cli 无法做到。 ubuntu 服务器本身能够挂载 nfs 共享。我与zfs sharenfs ...分享了分享 你试过你的 docker 容器的 IP 吗? 好主意!刚刚检查过了。容器在与 nfs-server 通信时使用外部节点 IP。所以10.0.0.106,就像直接挂载时的节点一样。在正在运行的容器中挂载似乎是不可能的(权限被拒绝,但在我尝试的每次挂载上,不仅仅是 nfs)

以上是关于docker volume nfs 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

解决 Docker 数据卷挂载的文件权限问题

docker volume 创建使用备份使用nfs存储

一个 docker 容器的权限被拒绝

理解Docker:Docker 存储之卷(Volume)

Docker php apache权限被拒绝

如何修复 docker:获得权限被拒绝问题