docker,docker容器的aufs根目录

时间:2014-10-01 03:38:11

标签: filesystems export docker

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

说我运行docker run mytag echo 'Done',之后,我相信docker会在aufs系统之上构建一个废弃的容器。我想在没有aufsdocker save的情况下使用docker export文件系统(比如chroot)。

我怎么能得到它?我需要访问那个堆栈的aufs文件系统,以便从整个docker系统中创建一个squashfs文件系统,而不是来自docker export的tar,因为我总是在映像文件上做mksquashfs并且从未做过mksquashfs该系统内的系统。

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

更新:

在尝试了Charles的建议后,我发现在该系统内制作一个squashfs系统是不可行的:

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的答案作为答案。

由于

2 个答案:

答案 0 :(得分:2)

我同意评论但是图片可以在/var/lib/docker/aufs/diff/<id>处找到,其中您可以使用

找到容器的ID
docker inspect <container-name> | grep Id

答案 1 :(得分:1)

考虑在容器本身内运行mksquashfs,并挂载目标目录(以及绑定挂载上的根文件系统,因此您的squashfs映像不会尝试递归到/proc,{ {1}}等。)

类似于以下未经测试的代码:

/sys

可能会调用某些调整 - 例如,我不确定容器中是否需要存在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标志可能是不必要的

这样做的好处是不关心使用哪个Docker后端 - 它可以像LVM一样使用LVM和btrfs存储后端以及AUFS - 并且仅依赖于支持的语义(所以它&#39;我将继续使用未来版本。)