2016-09-29 295 views
1

我想要控制docker是運行在永久性存儲上還是運行在永久性存儲上,並且覆蓋一個易失性存儲。Docker:是否可以使用覆蓋支持文件系統?

這是因爲我在SD卡(Raspberry Pi)上有文件系統,它需要持續很長時間。我主要想操作一個覆蓋有tmpfs(運行容器)的只讀文件系統(ext4),但是當我檢測到有更新可用時,我想要卸載overlayfs,將文件系統切換爲讀寫,更新映像,然後將所有內容切換回tmpfs覆蓋的只讀文件系統。

# mv /var/lib/docker /var/lib/docker~ 
# mkdir -p /var/lib/docker /tmp/docker /tmp/work 
# mount -t overlay -o lowerdir=/var/lib/docker~,upperdir=/tmp/docker,workdir=/tmp/work overlay /var/lib/docker 
# docker daemon --storage-driver devicemapper 

我嘗試了兩種存儲驅動程序:overlay2devicemapper(循環)。前者拒絕使用overlayfs底層文件系統(在文檔中也提到它不被支持),後者消耗我所有的內存,然後Docker被操作系統殺死。樹莓派和我的電腦的行爲是一樣的。

應該工作的唯一存儲是vfs,但從我所讀到的,它存儲非常低效(沒有寫時拷貝),所以它對我來說是沒有用的。

現在我試着用aufs存儲驅動程序和overlayfs支持文件系統(Docker文檔沒有聲明它被禁用)。我希望它能夠工作,但它有一些缺點:主線Linux內核不支持aufs。

是否有其他方式在兩個文件系統之間切換?或者可以通過一些完全不同的方式(例如運行內存容器)來保存SD卡?

回答

0

編輯:對不起,最後這個不工作!。 Docker守護進程啓動但無法創建容器。這是錯誤:與overlayfs後盾文件系統工作

Handler for POST /v1.24/containers/create returned error: error creating aufs mount to /var/lib/docker/aufs/mnt c549130a63857658f8675fd84296afae46293a9f7ae54e9ee04e83c231db600f-init: invalid argument 

的aufs存儲驅動程序。現在看來,它似乎是唯一的選擇,但是我對解決方案並不滿意,因爲它對我來說看起來像一個黑客,因爲aufs不在mainline內核中,所以我需要自己編譯內核。

這是我做的(這是相當一個黑客,請諮詢我做的更好):

  • 我的電腦上:

    $ git clone https://github.com/p4l1ly/rpi-kernel 
    $ cd rpi-kernel 
    $ vagrant up 
    

    ...等待一段相當長時間...

    $ vagrant ssh 
        $ cp /var/kernel_build/results/kernel-20161003-100112/rpi2_3/kernel7.img /vagrant/ 
        $ exit 
    $ sudo cp kernel7.img /mnt 
    
  • 然後在SD卡上:

    # mv /var/lib/docker /var/lib/docker~ 
    # mkdir -p /var/lib/docker /tmp/docker /tmp/work 
    # mount -t overlay -o lowerdir=/var/lib/docker~,upperdir=/tmp/docker,workdir=/tmp/work overlay /var/lib/docker 
    # docker daemon --storage-driver aufs 
    
相關問題