在主机文件系统中安装Docker容器内容

我想能够检查一个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差异将显示哪些文件在该容器中更改,如果你想看看什么改变,而不是原来的图像。

对于必须持久且可检查的数据,可能更好的模式是将其放在容器中的一个卷中,并将其安装在真实的文件系统中,或者放在纯数据容器中,或放在同一个容器中,但是您可以启动另一个容器,检查程序会从中安装这些卷。