我做了一个docker拉,可以列出下载的图像。我想看看这张照片的内容。在网上查了一下,但没有直接的答案。
当前回答
如果你想检查图像内容而不运行它,你可以这样做:
$ 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存储驱动程序。
其他回答
如果你想在不启动容器的情况下列出镜像中的文件:
docker create --name listfiles <image name>
docker export listfiles | tar -t
docker rm listfiles
这里公认的答案是有问题的,因为不能保证图像将具有任何类型的交互式外壳。例如,无人机/无人机图像包含在一个命令/无人机上,它也有一个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替换它。
探索docker图像!
弄清楚里面是什么样的shell bash或sh…
首先检查镜像:docker Inspect name-of-container-or-image
在JSON返回中查找入口点或cmd。
然后执行:docker命令——rm -it——entrypoint=/bin/bash映像名称
进入后执行:ls -lsa或其他shell命令,如:CD ..
它代表互动…和遥控。rm表示运行后删除容器。
如果没有像ls或bash这样的常用工具,而你可以访问Dockerfile,简单地将常用工具作为一个层添加。 示例(alpine Linux):
RUN apk add --no-cache bash
当你无法访问Dockerfile时,只需从新创建的容器中复制/提取文件并查看它们:
docker create <image> # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah
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
如果图像包含一个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文件中。
推荐文章
- PYTHONUNBUFFERED在docker文件中的用途是什么?
- 如何在Dockerfile CMD中使用变量?
- 将主机端口转发到docker容器
- “docker compose”与“docker-compose”的区别
- /bin/sh: apt-get:未找到
- 如何在docker映像的新容器中运行bash ?
- docker -撰写持久数据MySQL
- 从主机连接到docker容器中的mysql
- 当我使用Alpine作为基本图像时,如何添加用户?
- Docker -绑定0.0.0.0:4000失败:端口已经分配
- 将Python诗歌与Docker集成
- 如何在系统启动时运行docker-compose up -d ?
- 如何确定一个进程是否运行在lxc/Docker内部?
- 在docker容器上挂载多个卷?
- Kubernetes如何使部署更新映像