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


当前回答

这里公认的答案是有问题的,因为不能保证图像将具有任何类型的交互式外壳。例如,无人机/无人机图像包含在一个命令/无人机上,它也有一个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替换它。

其他回答

onlineer,不运行docker(基于上面的响应)

IMAGE=your_image docker create --name filelist $IMAGE command && docker export filelist | tar tf - | tree --fromfile . && docker rm filelist

相同,但是报告树结构到result.txt

IMAGE=your_image docker create --name filelist $IMAGE command && docker export filelist | tar tf - | tree --noreport --fromfile . | tee result.txt && docker rm filelist

使用Docker EE for Windows (17.66.2 - EE -6 on Hyper-V Server 2016),可以在主机操作系统的C:\ProgramData\ Docker \windowsfilter\路径下检查Windows容器的所有内容。

不需要特殊安装。

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

这里公认的答案是有问题的,因为不能保证图像将具有任何类型的交互式外壳。例如,无人机/无人机图像包含在一个命令/无人机上,它也有一个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替换它。

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

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

如果你想检查图像内容而不运行它,你可以这样做:

$ sudo bash
...
$ cd /var/lib/docker  # default path in most installations
$ find . -iname a_file_inside_the_image.ext
... (will find the base path here)

这适用于当前默认的BTRFS存储驱动程序。