我想能够检查一个Docker容器的内容(只读)。 一个优雅的方法是将容器的内容挂载到目录中。 我正在讨论在主机上安装容器的内容,而不是在容器内的主机上安装一个文件夹。
我可以看到现在在Docker中有两个存储驱动程序:aufs和btrfs。 我自己的Docker安装使用btrfs,并浏览到/ var / lib / docker / btrfs / subvolumes显示系统上每个Docker容器的一个目录。 但是这是Docker的一个实现细节,挂载这些目录到别的地方感觉不对。
有没有这样做的正确方法,或者我需要修补Docker来支持这些types的坐骑?
看看docker export 。
要快速列出容器中的文件:
docker export CONTAINER|tar -t
要导出:
docker export CONTAINER>snapshot.tar docker export CONTAINER|tar x PATH-IN-CONTAINER
或者看一个文件:
docker export CONTAINER|tar x --to-stdout PATH-IN-CONTAINER # eg docker export consul|tar x --to-stdout etc/profile
Docker 1.8支持cp :
https://docs.docker.com/reference/commandline/cp/
Usage: docker cp [options] CONTAINER:PATH LOCALPATH|- docker cp [options] LOCALPATH|- CONTAINER:PATH
更新:你应该ssh到你的docker机器,当你运行这个。
您可以使用docker commit来将容器的当前状态保存在新图像中,并从此图像开始交互容器以检查内容。
从文档:
将容器的文件更改或设置提交到新映像可能会很有用。 这允许您通过运行交互式shell来debugging容器,或者将工作数据集导出到其他服务器。
希望这可以帮助。
您可以使用nsenter在容器/命名空间内运行您的检查程序(可能必须已经包含在容器中)。 但是如果要装入容器文件系统,就必须装载原始映像,如果是aufs,或者所使用的设备映射器,btrfs和其他(未来)存储引擎的等效操作,则必须装载所有图层,这些操作在每种情况下都不相同。 可能会更有效率的让docker为您完成工作,完全按照应有的程序进行,并使用nsenter在集装箱内进行检查。
还有其他的方法。 docker差异将显示哪些文件在该容器中更改,如果你想看看什么改变,而不是原来的图像。
对于必须持久且可检查的数据,可能更好的模式是将其放在容器中的一个卷中,并将其安装在真实的文件系统中,或者放在纯数据容器中,或放在同一个容器中,但是您可以启动另一个容器,检查程序会从中安装这些卷。