当我使用 docker-compose up
命令时,我可以看到我在 docker-compose.yml
文件中所有容器的日志。
然而,当我使用 docker-compose run app
命令时,我只能看到 app
的控制台输出,而看不到 app
依赖的其他服务的日志。如何查看其他服务的日志输出?
当我使用 docker-compose up
命令时,我可以看到我在 docker-compose.yml
文件中所有容器的日志。
然而,当我使用 docker-compose run app
命令时,我只能看到 app
的控制台输出,而看不到 app
依赖的其他服务的日志。如何查看其他服务的日志输出?
在撰写本文时,docker-compose run
命令没有提供一个开关来查看其他服务的日志,因此您需要使用docker-compose logs
命令来查看您想要的日志。
正如@Sandburg所评论的那样,docker compose现在已经集成到docker中。如here所述,大多数docker compose命令可以以相同的方式调用,只需去掉连字符即可。因此,使用docker compose代替docker-compose:
新的Compose V2支持将compose命令作为Docker CLI的一部分,现已推出。
Compose V2将compose功能集成到Docker平台中,继续支持大多数先前的docker-compose功能和标志。您可以通过将连字符(-)替换为空格,使用docker compose而不是docker-compose来运行Compose V2。
docker-compose logs <name-of-service>
适用于所有服务
docker-compose logs
请使用文档中的以下选项:
用法:logs [选项] [SERVICE...]
选项:
--no-color 产生单色输出。
-f, --follow 跟随日志输出。
-t, --timestamps 显示时间戳。
--tail="all" 每个容器从日志末尾显示的行数。
您可以在分离模式下启动Docker compose,并稍后附加到所有容器的日志。如果您完成了观看日志,可以从日志输出中分离自己而不关闭服务。
docker-compose up -d
命令以分离模式(-d
)启动所有服务(在分离模式下,您将看不到任何日志)docker-compose logs -f -t
命令附加到所有正在运行的服务的日志,其中 -f
表示您跟随日志输出,-t
选项提供时间戳(请参见 Docker reference)Ctrl + z
或 Ctrl + c
命令分离您自己与日志输出而不关闭正在运行的容器如果您对单个容器的日志感兴趣,可以使用 docker
关键字:
docker logs -t -f <name-of-service>
要将输出保存到文件中,您需要在日志命令中添加以下内容:
docker-compose logs -f -t >> myDockerCompose.log
docker-compose run
和连接到那些具有在docker.compose.yml
中列出的服务名称之外的独特名称的服务的。 - TetraDevdocker-compose run
启动的容器实例不算作docker-compose所指的“服务”。docker-compose logs
只会打印“服务”的日志。这就是为什么你不能使用docker-compose logs
打印主命令的日志,所以如果你使用docker-compose run -d
,你只能使用docker logs
(而不是compose
)命令来检查主任务的日志。 - GolDDranksdocker-compose
已经被整合到 Docker 中,并且已经改名为 docker compose
,中间不再需要连接符。 - Sandburgdocker compose
的任何提示。您能否进一步解释一下?如果我可以指向文档,我正在考虑改进我的答案。 - Bruno Bieridocker-compose logs -t -f --tail <no of lines>
docker-compose logs -t -f --tail <no of lines> <name-of-service1> <name-of-service2> ... <name-of-service N>
docker-compose logs -t -f --tail 5 portal api
其中5表示从两个日志中获取最后5行。--tail
标志以获取所有日志。 - n8jadamsdocker-compose up -d
docker ps
docker logs <containerid>
很遗憾,我们需要单独运行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
(docker-compose --verbose up | Tee-Object build.log) || ($env:FAILED='yes')
。我无法完整回答,因为那需要线程处理。我认为模拟bash的pipefail不值得。相反,请查看Start-TreadJob
和https://learn.microsoft.com/en-us/dotnet/api/system.threading.semaphore?view=net-6.0。 - Mavaddat Javid
docker-compose logs -f 服务名称
。 - Xiongbing Jindocker-compose run
每次执行时都会创建新的容器。 - jazgotdocker-compose run
来运行我的测试,所以如果它创建一个新的容器,那么没关系。主要问题只是看不到依赖服务的日志输出。 - sthomps