在docker世界中,可以轻松查看docker容器的日志(即正在运行的图像)。但在图像创建过程中,通常会发出多个命令。例如,节点项目中的npm install命令。查看这些命令的日志也是有益的。我很快从文档中搜索过,但没有找到如何获取docker图像的日志。有可能吗?
答案 0 :(得分:13)
最简单的方法是使用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
答案 1 :(得分:2)
有同样的问题,我用
解决了docker build --no-cache --progress=plain -t my-image .
答案 2 :(得分:0)
使用此: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
答案 3 :(得分:0)