2015-03-20

Ubuntu 和 LXC Container 互相存取檔案

阿舍用 LXC 建好 Container 來用了一陣子之後,接下來,就會遇到要把檔案放進 Container 的問題了,其實,因為 Container 和主機是共用同樣的硬碟空間,所以,只要把檔案放到 Container 的 rootfs 資料夾就可以了,不過,如果要讓多個 Container 共用主機的一個資料夾的話,那要怎麼做哩 ? ...




用 LXC 建立的 Container 會被放在 /var/lib/lxc/[Container] 資料夾下,然後,在這個資料夾下會有一個 config 檔案,是這個 Container 的設定檔,另外,還有一個叫 rootfs 的資料夾,裡面看到的東西,就是你 attach 進 Container 後,在 / 資料夾下所看到的東西,所以,只要把檔案放進這個 rootfs 資料來下的任何一個地方,就可以從 Container 裡來存取哩 !

可把 Ubuntu 的任何資料夾掛到 Container 裡

以阿舍建立的 Container 的名字叫做 u1404a 為例,阿舍就可以直接到 /var/lib/lxc/u1404a/rootfs 資料夾來直接存取 u1404a 這個 Container 的檔案,如果阿舍用 cat 指令在 /var/lib/lxc/u1404a/rootfs/var/tmp 資料夾建立一個檔案的話,那麼當 attach 到 u1404a Container 時,就可以在 /var/tmp 資料夾看到阿舍新增的檔案哩 !

阿舍上面說的操作方式雖然還滿方便的,但是,如果你希望所有的 Container 都存取同一個資料夾時,就會不太方便哩 ! 所以,就要改用阿舍接下來要說明的這個方式來解決這個問題,而做法就是在 Ubuntu 上建立一個資料夾,然後,讓所有的 Container 都在啟動時,自動來掛載這個資料夾,這樣,Ubuntu 和 Container 就可以利用這個資料夾來交換檔案哩 !

以阿舍要讓 u1404a 這個 Container 裡的 /data 資料夾自動掛載 Ubuntu 的 /var/cache/lxc/data 資料夾為例,阿舍要先在 Ubuntu 的 /var/cache/lxc 資料夾下建立 data 資料夾,然後,再打開 u1404a  Container 的設定檔 /var/lib/lxc/u1404a/config,加入下面這一行。

# u1404a 要改掉
lxc.mount = /var/lib/lxc/u1404a/fstab

上面這一行加好之後,請儲存後離開,接著,請新增 /var/lib/lxc/u1404b/fstab 這個檔案,也就是上面設定檔新增的檔案路徑和名稱,然後,在這個 fstab 檔裡加入下面這一行。

/var/cache/lxc/datd /var/lib/lxc/u1404a/rootfs/data none bind,create=dir

上面這一行的前面放的是 Ubuntu 的資料夾路徑,而後面放的則是 Conatiner 要掛載的掛載點,這個掛載點最好使用 Ubuntu 主機的絕對路徑 ( 有人說可以用 Container 的相對路徑,不過,阿舍沒試成功哩 ! ),同時,這個掛載點的資料夾可不用先建立,如果資料夾不存在的話,就會自動建立哩 !

上面提到的二個設定檔都調整好之後,如果 Container 還在啟動中,就要用下面第一行的指令來停止 Container,請不要使用 reboot 的方式,不然,新設定是不會生效的,而如果本來就沒有啟動,就直接用下面的第二行指令來啟動,起動完成後,用下面第三行的 attch 指令進入 Container 後,在 /data 資料夾建立的檔案或資料夾就會出現在 /var/cache/lxc/data 裡哩 !

$ sudo lxc-stop -n u1404a

$ sudo lxc-start -n u1404a -d

$ sudo lxc-attach -n u1404a

如果要讓另一個 Container 也載掛同樣的 /var/cache/lxc/data 資料夾的話,操作方式就和上面提到方式一模一樣,只是所有 "u1404a" 的部分都要換另一個 Container 的名稱哩 ! ...


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁