我做了一个docker pull,可以列出下载的图像。我想看看这张图片的内容。在网上搜索但没有直接答案。感谢。
答案 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
存在以下文件:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
OR
您可以使用潜水与TUI交互查看图像内容
答案 4 :(得分:6)
答案 5 :(得分:4)
我们可以尝试以下一种更简单的方法:
docker image inspect image_id
这在Docker版本中有效:
DockerVersion": "18.05.0-ce"
答案 6 :(得分:2)
探索文档图像!
找出其中的bash
或sh
或...类型的外壳。
首先检查图像:docker inspect name-of-container-or-image
在json返回中寻找entrypoint
或cmd
。
然后执行: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:最新文件
答案 9 :(得分:-5)
Docker仍在建设中。我最后一次检查它时没有将此功能作为命令行工具的一部分。
但是,您可以尝试在图像上进行泊坞检查。您将在GraphDriver下看到名为Data的部分。在这里,您可以找到可以运行的路径,例如UpperDir。
这可能不适用于docker的所有存储驱动程序。