如何使用docker-compose运行查看日志输出?

sth*_*mps 69 docker docker-compose

当我使用时,docker-compose up我可以在我的docker-compose.yml文件中看到所有容器的日志.

但是,当我使用时,docker-compose run app我只看到控制台输出,app但没有任何app依赖的服务.如何查看其他服务的日志输出?

Bru*_*eri 110

请参阅泊坞日志

您可以在分离模式下启动Docker compose,然后将自己附加到所有容器的日志中.如果您已完成日志记录,则可以在关闭服务的情况下从日志输出中分离出来.

  1. 用于docker-compose up -d分离模式(-d)启动所有服务(您不会在分离模式下看到任何日志)
  2. 使用docker-compose logs -f -t重视自己的日志中所有正在运行的服务,而-f意味着你跟随日志输出和-t选项使您的时间戳(见泊坞参考)
  3. 使用Ctrl + zCtrl + c分离从日志输出自己没有关闭正在运行的容器

如果您对单个容器的日志感兴趣,可以使用docker关键字代替:

  1. 使用 docker logs -t -f <name-of-service>

保存输出

要将输出保存到文件,请将以下内容添加到logs命令:

  1. docker-compose logs -f -t >> myDockerCompose.log

  • 我不知道为什么这是公认的答案。问题是关于docker-compose运行以及很多时候使用-rm运行,因此没有日志。我想在运行Shell脚本时看到其输出。 (4认同)
  • 虽然这是有用的信息,但这并不是问题的答案。正如 @JamesO'Brien 所说,问题是关于“docker-compose run”并附加到这些服务,这些服务与“docker.compose.yml”中列出的服务具有唯一的名称 (3认同)
  • 我认为我所见过的每一篇文档中都缺少一个关键的东西:由 `docker-compose run` 启动的容器实例不算作 docker-compose 所指的“服务”。`docker-compose log` 只打印“services”的日志。这就是为什么你无法使用`docker-compose log`打印主命令的日志,所以如果使用`docker-compose run -d`,你只能使用`docker log`检查主作业的日志(不是“撰写”)命令。 (2认同)

Inv*_*ble 11

如果要查看来自多个容器的输出日志.例如.假设您有API容器和门户容器,那么您可以执行以下操作:

docker-compose logs -t -f --tail 5

其中5代表两个日志的最后5行.


Nat*_*han 6

不幸的是我们需要docker-compose logs单独运行docker-compose run。为了让它可靠地工作,我们需要抑制docker-compose run退出状态,然后重定向日志并以正确的状态退出。

#!/bin/bash
set -euo pipefail
docker-compose run app | tee app.log || failed=yes
docker-compose logs --no-color > docker-compose.log
[[ -z "${failed:-}" ]] || exit 1
Run Code Online (Sandbox Code Playgroud)

  • @Espresso,当然。`(docker-compose --verbose up | Tee-Object build.log) || ($env:FAILED='是')`。我无法完整回答,因为这需要线程。我认为不值得模仿 bash 的管道失败。请查看“Start-TreadJob”和 https://learn.microsoft.com/en-us/dotnet/api/system.threading.semaphore?view=net-6.0 (2认同)

小智 5

  1. 使用以下命令以分离模式启动容器: docker-compose up -d
  2. 查看容器使用: docker ps
  3. 查看容器的日志: docker logs <containerid>