Docker中的NFS:exportfs:<path>不支持NFS导出
我正在使用docker NFS容器,但遇到安装导出目录(即使在本地主机上)的麻烦。
问题
exportfs: <path> does not support NFS export
设置
我的容器使用一个入口脚本
- 写目录(通过命令行参数提供)到
/etc/exports
, - 调用
rpcbind
和service nfs-kernel-server start
,和 - 请
inotifywait
继续运行。
Dockerfile没什么特别的。 我安装inotify-tools
和nfs-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文件系统。