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文档没有声明它是禁用的)。 我希望它能起作用,但是它有一些缺点:主streamLinux内核不支持aufs。

有没有其他的方法来切换两个文件系统? 或者可以通过一些完全不同的方式(例如运行内存容器)来保存SD卡?

编辑:对不起,这最后不工作! 。 Docker守护进程启动,但无法创build容器。 这是错误的:

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

aufs存储驱动程序与overlayfs支持文件系统的作品 。 现在看起来似乎是唯一的select,但是我对解决scheme并不满意,因为它对我来说看起来像一个黑客,因为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 
Interesting Posts