查看容器日志
docker logs 命令显示由正在运行的容器记录的信息。docker service logs 命令显示参与服务的所有容器记录的信息。记录的信息及其格式几乎完全取决于容器的端点命令。
默认情况下,docker logs 或 docker service logs 显示命令的输出,就像您在终端中交互式运行命令时一样。Unix 和 Linux 命令在运行时通常会打开三个 I/O 流,称为 STDIN、STDOUT 和 STDERR。STDIN 是命令的输入流,可能包括来自键盘的输入或来自另一个命令的输入。STDOUT 通常是命令的正常输出,而 STDERR 通常用于输出错误消息。默认情况下,docker logs 显示命令的 STDOUT 和 STDERR。要了解更多关于 I/O 和 Linux 的信息,请参阅 Linux 文档项目关于 I/O 重定向的文章。
在某些情况下,docker logs 可能不会显示有用的信息,除非你采取额外的步骤。
- 如果您使用将日志发送到文件、外部主机、数据库或其他日志后端的
日志驱动程序,并且禁用了
"双重日志记录",
docker logs可能不会显示有用的信息。 - 如果你的镜像运行的是一个非交互式进程,比如一个网络服务器或数据库,该应用程序可能会将其输出发送到日志文件,而不是
STDOUT和STDERR。
在第一种情况下,您的日志以其他方式处理,您可以选择不使用docker logs。在第二种情况下,官方的nginx镜像展示了一种解决方法,而官方的Apache httpd镜像展示了另一种方法。
官方的nginx镜像创建了一个从/var/log/nginx/access.log到/dev/stdout的符号链接,并创建了另一个从/var/log/nginx/error.log到/dev/stderr的符号链接,覆盖了日志文件并导致日志被发送到相关的特殊设备。请参阅Dockerfile。
官方的httpd驱动程序更改了httpd应用程序的配置,将其正常输出直接写入/proc/self/fd/1(即STDOUT),并将其错误写入/proc/self/fd/2(即STDERR)。请参阅Dockerfile。
下一步
- 配置 日志驱动程序。
- 编写一个 Dockerfile。