如何获取docker容器底层的aufs
系统的根文件夹信息?
说我运行docker run mytag echo 'Done'
,之后,我相信docker会在aufs
系统之上构建一个废弃的容器。我想在没有aufs
或docker 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的答案作为答案。
由于
答案 0 :(得分:2)
我同意评论但是图片可以在/var/lib/docker/aufs/diff/<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;我将继续使用未来版本。)