docker工人,docker集装箱的aufs根在哪里

如何获取docker容器底层的aufs系统的根文件夹信息?

说我运行docker run mytag echo 'Done' ,在那之后,我相信docker将有一个废弃的容器build立在aufs系统之上。 而我想利用这个aufs文件系统(比如用chroot)而不用做一个docker save或者docker export

我怎么能得到这个? 我需要访问该堆栈的aufs文件系统,以便从整个docker系统中创build一个squashfs文件系统,而不是从docker docker export的tar文件,因为我总是对映像文件执行mksquashfs,并且从来没有从mksquashfs系统在那个系统内。

这是Ubuntu下的lxc-docker 1.2.0版本。

更新:

经过查尔斯的build议,我发现在这个系统内制作一个压扁系统是不可行的:

 root@1676061f0072:/# mount --bind / /mnt/root || { echo error bind mount; exit; } # bind-mount container root only mount: block device / is write-protected, mounting read-only mount: cannot mount block device / read-only error bind mount exit 

所以,我把Usman的回答作为答案。

谢谢

我同意这个意见,但是这些图像可以在/var/lib/docker/aufs/diff/<id>处find,其中是您可以使用的容器的ID

 docker inspect <container-name> | grep Id 

考虑在容器本身内运行mksquashfs ,目标目录被挂载(并且根文件系统在绑定挂载上,所以你的squashfs映像不会尝试recursion到/proc/sys等中)。

类似于下面的未经testing的代码:

 docker run --privileged=true -v /path/to/destination:/mnt/dest bash <<'EOF' mkdir -p /mnt/root || exit mount --bind / /mnt/root || exit # bind-mount container root only mksquashfs /mnt/root /mnt/dest/squashfs.img # build an image of that root fs EOF 

有些调优可能会被调用 – 例如,我不确定/mnt/dest是否需要存在于容器中,例如,可以不需要--privileged标志。

这有一个好处,就是不用关心哪个Docker后端正在使用 – 它将和LVFS和btrfs存储后端一样和AUFS一起工作,并且仅仅依赖于支持的语义(所以它将继续与未来版本一起工作) 。