如何将docker容器的根目录挂载为NFS挂载点

我是新来的docker,我试图装入docker容器的根目录作为NFS挂载点。 例如,我有一个NFS挂载点test:/home/user/3243 ,我试着:

 docker run -it -v "test:/home/user/3243":/ centos7 /bin/bash 

绝对是失败的 所以我试过这个:

 mount -t nfs test:/home/user/3243 /mnt/nfs/3243 docker run -it -v /mnt/nfs/3243:/ centos7 /bin/bash 

但又失败了,所以怎么做? 能解决吗?

这里有几个问题:

  1. 您无法挂载到容器的根目录。 所以docker run -v /foo:/将永远不会工作。

  2. 用你第一次尝试的语法, -v test:/foo:bar ,Docker会认为这是想创build一个名为“test”的“named”卷。

你应该可以先做NFS挂载,然后执行docker run -v /mnt/nfs/3243:/foo将nfspath挂载到/foo 。 但是,再次,你不能挂载到/

目前正在讨论(自2014年年中以来) 第4213期 。

Jeroen van Bemmel(jbemmel)最近的一个解决方法是:

看起来,NFSfunction依赖于底层的存储驱动程序(aufs,devicemapper等),以及进程之间文件句柄的共享(请参阅博客文章“ docker: devicemapper修复”设备或资源繁忙“( EBUSY ) ” )即“不共享”可能会影响NFS挂载。

我不再使用' MOUNTPOINT=/vm/nfs ',因为我不确定这个事件是否发生。
相反,我创build了一个像这样的upstart文件:

 cat > /etc/init/ecdn.conf << EOF description "eCDN container" author "Jeroen van Bemmel" # mounted MOUNTPOINT=/vm/nfs doesn't seem to work, at least not the first time start on started docker and virtual-filesystems stop on starting rc RUNLEVEL=[016] respawn script exec /usr/bin/docker start -a ecdn end script pre-stop script /usr/bin/docker stop ecdn # dont /usr/bin/docker rm ecdn end script EOF 

然后像这样创build容器:

 script -c "docker create -it --name='ecdn' --volume /vm:/usr/share/nginx/html/vm:ro image/name"