62

在 docker 世界中,可以很容易地看到 docker 容器的日志(即运行映像)。但是在图像创建过程中,通常会发出多个命令。例如节点项目中的 npm install 命令。查看这些命令的日志也是有益的。我快速从文档中搜索,但没有找到如何获取 docker 映像的日志。可能吗?

4

4 回答 4

110

有同样的问题,我用它解决了

docker build --no-cache --progress=plain -t my-image .
于 2020-10-28T22:30:59.580 回答
39

最简单的方法是使用tee将所有命令输出的副本发送到日志文件。如果您希望它附加到图像,请将您的运行命令输出到图像内的日志文件,例如:

RUN my-install-cmd | tee /logs/my-install-cmd.log

然后你可以运行一个快速的一次性容器来查看日志的内容:

docker run --rm my-image cat /logs/my-install-cmd.log

如果您不需要附加到图像的日志,则可以完全按照 JHarris 所说的那样记录每个构建的输出,只需对构建命令进行一次更改(而不是对运行命令进行大量更改):

docker build -t my-image . | tee my-image.build.log

如果您在不使用的情况下构建--rm=true,那么您拥有所有中间容器,并且每个中间容器都有一个您可以查看的日志

docker logs $container_id

最后,不要忘记图像中图层的历史。它们不显示每个命令的输出,但它对于所有那些不记录任何输出并且知道每一层来自哪个构建的命令很有用,特别是在使用大量缓存时。

docker history my-image
于 2016-06-15T11:38:02.800 回答
-3

您可以使用此命令在 powershell 中查看日志

docker logs --details <containerId>

这里还有其他带有日志的选项。

于 2019-10-03T21:17:51.500 回答
-4

使用这个:https
://github.com/jcalles/docker-wtee 阅读说明,请给我反馈。
或者...
如果您需要从正在运行的容器中获取日志,并且容器暴露了卷,请运行以下命令:

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh
于 2018-03-09T19:46:49.557 回答