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

时间:2015-10-16 06:49:19

标签: docker mount nfs

我是docker的新手,我尝试将docker container的根目录挂载为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

但又失败了,那怎么办呢?可以解决吗?

2 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 您无法挂载到容器的根目录。因此docker run -v /foo:/永远不会有用。

  2. 使用第一次尝试的语法-v test:/foo:bar,Docker会将此视为想要创建名为“test”的“命名”卷。

  3. 您应该首先执行NFS挂载,然后执行docker run -v /mnt/nfs/3243:/foo以将nfs路径挂载到/foo。 但同样,你无法登上/

答案 1 :(得分:0)

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

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

  

NFS功能似乎依赖于底层存储驱动程序(aufs,devicemapper等),以及进程间文件句柄的共享(参见博客文章“docker: devicemapper fix for “device or resource busy” (EBUSY)”)即'unshare'可能对NFS挂载产生影响。

     

我已经不再使用“MOUNTPOINT=/vm/nfs”,因为我不确定该事件是否被发出。
  相反,我创建了一个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
  

然后像这样创建容器:

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