如何查看泊坞窗图像内容

时间:2017-06-26 22:01:50

标签: docker

我做了一个docker pull,可以列出下载的图像。我想看看这张图片的内容。在网上搜索但没有直接答案。感谢。

10 个答案:

答案 0 :(得分:173)

您可以使用该图像运行交互式shell容器,并浏览该图像所具有的任何内容。

例如:

docker run -it image_name sh

或者,如果您想了解图片是如何构建的,这意味着Dockerfile中的步骤,您可以:

docker image history --no-trunc image_name > image_history

这些步骤将记录在image_history文件中。

对于配置了entrypoint的图片,您可以运行docker run -it --entrypoint sh image_name来覆盖它(在评论中有用地建议)。

答案 1 :(得分:102)

此处接受的答案存在问题,因为无法保证图像具有任何类型的交互式shell。例如,drone/drone图片包含单个命令/drone,它也有ENTRYPOINT,因此会失败:

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

这将失败:

$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".

这不是一种不常见的配置;许多最小图像仅包含支持目标服务所需的二进制文件。幸运的是,有一些机制可以探索不依赖于图像的内容的图像文件系统。最简单的可能是docker export命令,它将容器文件系统导出为tar存档。所以,启动一个容器(如果它失败则无关紧要):

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

然后使用docker export将文件系统导出到tar

$ docker export $(docker ps -lq) | tar tf -

docker ps -lq表示"给我最近的泊坞容器的编号"。您可以使用显式容器名称或ID替换它。

答案 2 :(得分:17)

您不应仅为了查看图像内容而启动容器。例如,您可能想要查找恶意内容,而不是运行它。使用“创建”而不是“运行”;

docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$

答案 3 :(得分:12)

docker save nginx > nginx.tar
tar -xvf nginx.tar

存在以下文件:

  • manifest.json –描述具有容器属性的文件系统层和json文件的名称。
  • .json –容器属性
  • –每个“ layerid”目录都包含描述该图层属性和与该图层关联的文件系统的json文件。 Docker将容器映像存储为层,以通过在映像之间重用层来优化存储空间。

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

OR

您可以使用潜水与TUI交互查看图像内容

enter image description here

https://github.com/wagoodman/dive

答案 4 :(得分:6)

要列出您必须运行的图片的详细内容docker run --rm image/name ls -alR,其中--rm表示从容器退出后立即删除。

enter image description here

答案 5 :(得分:4)

我们可以尝试以下一种更简单的方法:

docker image inspect image_id

这在Docker版本中有效:

DockerVersion": "18.05.0-ce"

答案 6 :(得分:2)

探索文档图像

  1. 找出其中的bashsh或...类型的外壳。

    首先检查图像:docker inspect name-of-container-or-image

    在json返回中寻找entrypointcmd

  2. 然后执行:docker run --rm -it --entrypoint=/bin/bash name-of-image

    一次在内部执行:ls -lsa或任何其他shell命令,例如:cd ..

    -it代表交互式...和tty。 --rm代表运行后删除容器。

答案 7 :(得分:0)

使用Windows版Docker EE(Hyper-V Server 2016上的17.06.2-ee-6),可以在主机OS的C:\ProgramData\docker\windowsfilter\路径下检查Windows容器的所有内容。

无需特殊安装。

文件夹前缀可以通过docker ps -a输出中的容器ID找到。

答案 8 :(得分:0)

有一个免费的开源工具Anchore,可用于扫描容器图像。此命令将允许您列出容器映像中的所有文件

anchore-cli图片内容myrepo / app:最新文件

https://anchore.com/opensource/

答案 9 :(得分:-5)

Docker仍在建设中。我最后一次检查它时没有将此功能作为命令行工具的一部分。

但是,您可以尝试在图像上进行泊坞检查。您将在GraphDriver下看到名为Data的部分。在这里,您可以找到可以运行的路径,例如UpperDir。

这可能不适用于docker的所有存储驱动程序。