如何查看 docker 图片的日志?

How to view logs for a docker image?

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

更新:既然问了这个问题,看来大家是看到buildkit的输出变化后才发现的。 Buildkit 包括以下选项(docker build --help 查看全部):

      --build-arg list          Set build-time variables
      --cache-from strings      Images to consider as cache sources
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --no-cache                Do not use cache when building the image
  -o, --output stringArray      Output destination (format: type=local,dest=path)
      --platform string         Set platform if server is multi-platform capable
      --progress string         Set type of progress output (auto, plain, tty). Use plain to show container output (default "auto")
      --pull                    Always attempt to pull a newer version of the image
  -q, --quiet                   Suppress the build output and print image ID on success
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
      --target string           Set the target build stage to build.

许多人想要的 buildkit 选项是 --progress=plain:

docker build -t my-image --progress=plain .

如果你真的想看到以前的构建输出,你可以使用环境变量禁用 buildkit,但我倾向于建议不要这样做,因为你会失去 buildkit 的很多功能(跳过未使用的构建步骤、并发构建步骤、多平台图像和 Dockerfile 的新语法,用于 RUN --mount...):

等功能
DOCKER_BUILDKIT=0 docker build -t my-image .

OP 要求将他们构建的日志包含在图像本身中。通常我会建议不要这样做,你会想要图像之外的那些日志。

也就是说,最简单的方法是使用 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

使用经典的 docker 构建命令,如果您不使用 --rm=true 进行构建,那么您将拥有所有中间容器,并且每个容器都有一个日志,您可以使用 [=23] 查看=]

docker logs $container_id

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

docker history my-image

使用这个:https://github.com/jcalles/docker-wtee
请阅读说明并给我反馈。
或者...
如果您需要从 运行ning 容器获取日志,并且容器公开了卷,运行 this:

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh

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

docker logs --details <containerId>

日志还有其他选项 here

有同样的问题,我用

解决了
docker build --no-cache --progress=plain -t my-image .