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


当前回答

有一个叫做anchor - cli的免费开源工具可以用来扫描容器图像。这个命令将允许您列出容器映像中的所有文件

anchore-cli image content myrepo/app:latest files

https://anchore.com/opensource/

编辑:不再从anchore.com,这是一个python程序,你可以从https://github.com/anchore/anchore-cli安装

其他回答

这里公认的答案是有问题的,因为不能保证图像将具有任何类型的交互式外壳。例如,无人机/无人机图像包含在一个命令/无人机上,它也有一个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的意思是“给我最近的docker容器的id”。您可以用显式的容器名称或id替换它。

如果图像包含一个shell,您可以使用该图像运行一个交互式shell容器,并探索该图像所具有的任何内容。如果sh不可用,busybox ash shell可能可用。

例如:

docker run -it image_name sh

或者跟随带有入口点的图像

docker run -it --entrypoint sh image_name

或者,如果你想查看映像是如何构建的,也就是Dockerfile中的步骤,你可以:

docker image history --no-trunc image_name > image_history

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

也许这不是一个非常直接的方法,但这个方法对我来说很有效。 我有一个ECR Repo(亚马逊容器服务存储库),我想看看它的代码。

首先,我们需要将想要访问的repo保存为tar文件。在我的例子中,命令是这样的- docker save .dkr.ecr.us-east-1.amazonaws.com/<name_of_repo>:image-tag > saved-repo.tar 使用- tar -xvf saved-repo.tar命令解压文件。你可以看到很多文件夹和文件 现在尝试找到包含您正在寻找的代码的文件(如果您知道部分代码) 文件搜索命令- grep - irl "要搜索的字符串" ./

这样你就能拿到文件了。即使该文件也可能被tar,所以使用步骤2中提到的命令解tar它。

如果你不知道你要搜索的代码,你将需要浏览你在步骤2之后得到的所有文件,这可能有点累。

祝一切顺利!

您不应该仅仅为了查看图像内容而启动容器。例如,您可能希望查找恶意内容,而不是运行它。使用“create”而不是“run”;

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

我们可以尝试一个简单的方法,如下所示:

docker image inspect image_id

这在Docker版本中是有效的:

DockerVersion": "18.05.0-ce"