Docker中的NFS:exportfs:<path>不支持NFS导出

我正在使用docker NFS容器,但遇到安装导出目录(即使在本地主机上)的麻烦。

问题

exportfs: <path> does not support NFS export 

设置

我的容器使用一个入口脚本

  • 写目录(通过命令行参数提供)到/etc/exports
  • 调用rpcbindservice nfs-kernel-server start ,和
  • inotifywait继续运行。

Dockerfile没什么特别的。 我安装inotify-toolsnfs-kernel-server ,公开端口2049,并复制入口点脚本。

我在El Capitan Macbook上使用docker-machine

我将卷从主机映射到容器,以使nfs服务器可以访问我想要导出的目录。

入口点脚本

 modprobe nfs modprobe nfsd for x in ${@}; do echo -e "$x\t*(rw,sync,no_subtree_check,crossmnt,fsid=root,no_root_squash)" >> /etc/exports done source /etc/default/nfs-kernel-server source /etc/default/nfs-common rpcbind service nfs-kernel-server start exec inotifywait --monitor /exports 

debugging

这是我想要导出的设置。

 %> ls $HOME/mounts a %> ls $HOME/mounts/a asdf 

这是我如何启动服务器。

 %> docker run --privileged --rm --name=nfs-server --volume=$HOME/mounts/a/:/exports/a docker-nfs-server /exports/a Exporting directories for NFS kernel daemon...exportfs: /exports/a does not support NFS export . Starting NFS kernel daemon: nfsd mountd. Setting up watches. Watches established. 

这里是容器运行时我一直在做的debugging。

 %> docker exec -it nfs-server bash root@6056a33f061e:/# ls /exports a root@6056a33f061e:/# ls /exports/a asdf root@6056a33f061e:/# showmount -a All mount points on 6056a33f061e: root@6056a33f061e:/# exportfs -a exportfs: /exports/a does not support NFS export root@8ad67c951ecd:/# mount none on / type aufs (rw,relatime,si=3ca85db062268b32,dio,dirperm1) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev type tmpfs (rw,nosuid,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu) cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) /dev/sda1 on /exports type ext4 (rw,relatime,data=ordered) Users on /exports/a type vboxsf (rw,nodev,relatime) /dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered) /dev/sda1 on /etc/hostname type ext4 (rw,relatime,data=ordered) /dev/sda1 on /etc/hosts type ext4 (rw,relatime,data=ordered) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) 

我知道的

比Jon Snowless。 我可以确定一些可能对我的问题负责的variables,但我不知道如何validation其中的任何一个:

  • $HOME/mounts/a在OSX文件系统上
  • 该文件系统被encryption
  • /exports/a被挂载到docker-machine VM中

我没有足够的NFS经验知道如何有效地进行debugging。 任何援助或信息将不胜感激。

更新

它适用于Parallels!

 %> docker run --privileged --rm --name=nfs-server --volume=$HOME/mounts/a/:/exports/a docker-nfs-server /exports/a %> docker exec -it nfs-server bash root@3786d888f039:/# mkdir --parents /imports/a root@3786d888f039:/# mount --types nfs --options nolock,proto=tcp,port=2049 localhost:/exports/a /imports/a root@3786d888f039:/# ls /imports a root@3786d888f039:/# ls /imports/a root@3786d888f039:/# ls /exports a root@3786d888f039:/# ls /exports/a root@3786d888f039:/# touch /exports/a/asdf root@3786d888f039:/# ls /exports/a asdf root@3786d888f039:/# ls /imports/a/ asdf 

这样就把问题缩小到了OSX / docker-machine甚至OSX上的encryption文件系统。