如何查看docker镜像的日志?

Vil*_*oja 13 docker dockerfile docker-image

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

die*_*l02 52

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

docker build --no-cache --progress=plain -t my-image .
Run Code Online (Sandbox Code Playgroud)

  • 是的。`--progress=plain` 是关键元素! (5认同)
  • --no-cache 对我来说很重要,因为调试 docker 命令(如树)的输出在缓存层时被隐藏。泰 (4认同)
  • 我猜你应该在这里插入“build”。否则,这就是我一直在寻找的答案。 (2认同)

BMi*_*tch 14

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

RUN my-install-cmd | tee /logs/my-install-cmd.log
Run Code Online (Sandbox Code Playgroud)

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

docker run --rm my-image cat /logs/my-install-cmd.log
Run Code Online (Sandbox Code Playgroud)

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

docker build -t my-image . | tee my-image.build.log
Run Code Online (Sandbox Code Playgroud)

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

docker logs $container_id
Run Code Online (Sandbox Code Playgroud)

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

docker history my-image
Run Code Online (Sandbox Code Playgroud)