我有一个Dockerfile,其中包含一系列RUN指令,可以执行“apt-get install”;例如,几行:
RUN apt-get install -y tree
RUN apt-get install -y git
在执行了“docker build”之后,如果我再执行“docker images -a”,我会看到在构建过程中创建的所有base-child-child-.... images的列表。
我想查看在执行“apt-get install -y git”行时安装的所有包的列表(包括可能已经安装的依赖包,除了git包)。
注意:我相信“docker diff”命令显示的是容器和启动它的镜像之间的差异。相反,我想显示的是两个镜像之间的差异(相同血统):“tree”和“git”图像ID。这可能吗?
谢谢。
9条答案
按热度按时间1bqhqjot1#
请看:
https://github.com/GoogleCloudPlatform/container-diff
这个工具可以区分本地或远程docker镜像,并且可以在不需要安装docker的情况下做到这一点。它具有文件和包级别“不同”(例如:apt、npm和pip),以便您可以更轻松地查看两个docker镜像之间更改的包的差异。
免责声明:我是这个项目的贡献者
c6ubokkw2#
这一个为我工作:
其中e5 cba 87 ecd 29和b1 d19 fe 1a 941是我感兴趣的图像,而/path/to/files是一个目录,可以是“/”。它列出了所有文件,对其进行排序,并添加哈希值,以防万一。meld突出显示了所有差异。
tzcvj98z3#
我想您可以通过
docker export CONTAINER_ID
或docker save IMAGE_ID
(根据评论更新)将两个图像的文件系统发送到tarball中。然后使用任何你喜欢的工具来区分文件系统- Git,Rdiff等。
zd287kbt4#
现在是2019年,我刚刚发现了一个有用的工具,它在2017年底发布。
以下内容来自container-diff github页面:
您可以类似地一次运行多个分析器:
c6ubokkw5#
每个RUN指令都会创建一个新的容器,您可以使用
docker diff <container>
检查容器更改了什么。因此,在构建dockerfile之后,运行
docker ps -a
以获取构建文件创建的容器列表。它应该看起来像这样:现在可以执行
docker diff 53d7dadafee7
来查看更改了什么。5ssjco0h6#
如果您知道容器ID或名称(甚至是已停止的容器),则可以快速动态转储文件列表。
然后你可以保存列表到文件和比较太列表文件。
如果您坚持使用图片ID或名称,您可以动态转储第一层的文件列表:
毕竟,我建议你启动容器,然后停止它,然后你可以得到一个合并的文件列表,如第一种方式所述。
2017/02/01:显示容器文件列表的最快方式,可以自由进入其根目录读取文件:
注意,如果你使用的是docker-machine,你需要先输入
docker-machine ssh
,然后输入sudo sh
。现在你得到了两个容器的根目录,你可以使用diff直接比较它们。
6yt4nkrj7#
请看:
https://github.com/moul/docker-diff
他们列出了Mac的
Brew
安装说明,我假设这是一个Bash脚本,所以我假设它可以在其他 *nix环境中工作。w6mmgewl8#
在这种情况下,你可能只需要查看两个层之间的差异,如果是这样,
dive
非常适合;它允许你在每一层检查文件系统,并且你可以通过改变类型(未改变、添加、删除、修改)来过滤文件。如果你想检查两个不相关的图像之间的差异,让两个
dive
进程并行运行也可以。wsxa1bj19#
新的dedicate d命令可用,从
docker scout
和Docker Desktop 4.17开始(2023年3月)Docker Desktop 4.18现在包括
docker scout compare
(仍然是抢先体验)。它可以比较两个图像并显示包和漏洞差异。示例:
将图像与最新标记进行比较