2015-10-16 108 views
1

我是docker的新手,我試圖將docker container的根目錄掛載爲NFS掛載點。 例如,我有一個NFS掛載點test:/home/user/3243,而且我想:如何將docker容器的根目錄掛載爲NFS掛載點

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

幾個問題在這裏:

  1. 您無法裝載到容器的根目錄。所以docker run -v /foo:/將永遠不會工作。

  2. 隨着第一次嘗試的語法-v test:/foo:bar,Docker會將此視爲想創建名爲「test」的「已命名」卷。

你應該能夠先做NFS掛載,然後做docker run -v /mnt/nfs/3243:/foo有安裝/foo的NFS路徑。 但是,您再次無法安裝到/

+0

感謝您的幫助!順便說一句,爲什麼不能掛載到容器的根目錄?是否有這樣的文件? – Guy

+1

因爲這會覆蓋整個容器fs。 – cpuguy83

+0

謝謝@ cpuguy83!我發佈我的原始目的在[如何在NFS,EBS,羊羣等高可用存儲上運行碼頭容器](http://stackoverflow.com/questions/33227359/how-to-run-docker-container-on-high -available-storage-like-nfs-ebs-flock-etc等),如果可能的話希望收到你的消息〜 – Guy

1

目前在issue 4213中討論過(2014年中以來)。

通過Jeroen van Bemmel (jbemmel)最近的一個解決方法是:

看來,NFS功能依賴於底層的存儲設備驅動程序(AUFS,devicemapper等),以及文件的共享進程之間的處理(見博客發佈「docker: devicemapper fix for 「device or resource busy」 (EBUSY)」)即'取消共享'可能會影響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" 
+0

感謝您的回答,我有兩點重要:使用NFS並掛載在根目錄下。我最常讀這個問題NFS掛載,你知道如何掛載到根目錄嗎? – Guy

+0

@Guy我不這樣做,這將是一個很好的問題。 – VonC

+0

感謝您的信息〜 – Guy

相關問題