我可以看到服务器的共享:
[root@sandbox /]# showmount -e 192.168.0.111
Export list for 192.168.0.111:
/RAIDPOOL02/vers *
/RAIDPOOL02/prod *
/RAIDPOOL02/pipeline *
当我尝试安装时,出现以下信息:
[root@sandbox /]# mkdir -p /192.168.0.111/pipeline
[root@sandbox /]# mount --verbose --options=nolock,exec,soft,intr,uid=500,rsize=65536,wsize=65536 192.168.0.111:/pipeline /192.168.0.111/pipeline
mount.nfs: timeout set for Wed May 4 08:16:49 2016
mount.nfs: trying text-based options 'nolock,soft,intr,uid=500,rsize=65536,wsize=65536,vers=4,addr=192.168.0.111,clientaddr=172.20.0.3'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'nolock,soft,intr,uid=500,rsize=65536,wsize=65536,addr=192.168.0.111'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.0.111 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.0.111 prog 100005 vers 3 prot UDP port 20048
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted
我在 Dockerfile 中公开了这些端口:
EXPOSE 2049
EXPOSE 20048
并且我可以成功地 nmap 服务器的 2049 端口:
[root@sandbox /]# nmap -p 2049 192.168.0.111
Starting Nmap 6.40 ( http://nmap.org ) at 2016-05-04 08:21 UTC
Nmap scan report for 192.168.0.111
Host is up (0.00061s latency).
PORT STATE SERVICE
2049/tcp open nfs
为什么我会收到“操作不允许”的消息?
答案1
您可能需要以特权模式运行容器:
docker run --privileged=true
如果您可以将docker升级到17.06,那么您可以直接挂载NFS共享,而无需额外的功能:
docker run --mount 'type=volume,src=src_name,volume-driver=local,dst=/mnt,volume-opt=type=nfs,volume-opt=device=:/nfs-share,"volume-opt=o=nfs-server,vers=4,hard,timeo=600,rsize=1048576,wsize=1048576,retrans=2"' -d -it --name mycontainer ubuntu
从这里的讨论中得到提示: https://github.com/moby/moby/issues/28809
答案2
我发现有几个部分缺失。NFS 也需要端口 111。
您排除了“docker run”语句,因此我假设您没有端口 111 的 -p 开关。如果您不重定向端口,“docker run”语句的端口部分应该类似于“-p 111:111 -p 2049:2049 -p 20048:20048”(不带引号)。