如何获得aufs系统的根文件夹信息?
假设我运行docker run mytag echo 'Done',在那之后,我相信码头将有一个废弃的容器建立在aufs系统之上。我想使用这个aufs文件系统(比如chroot),而不执行docker save或docker export。
我怎么能拿到呢?我需要访问这个aufs文件系统堆栈,以便在整个码头系统中创建一个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所以,我以奥斯曼的回答作为答案。
谢谢
发布于 2014-10-01 17:28:32
我同意这一评论,但是这些图像可以在/var/lib/docker/aufs/diff/<id>找到,其中是容器的id,您可以使用
docker inspect <container-name> | grep Id发布于 2014-10-02 19:53:35
考虑在容器本身内运行mksquashfs,并安装目标目录(以及绑定挂载上的根文件系统,这样squashfs映像就不会试图恢复到/proc、/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是否需要存在于容器中,然后才能运行,例如,--privileged标志可能是不必要的。
它的优点是不关心使用的是哪个Docker后端--它与AUFS一样适用于LVM和btrfs存储后端--并且只依赖于支持的语义(因此它将继续使用未来的版本)。
https://stackoverflow.com/questions/26133731
复制相似问题