查看容器日志
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
可能不会显示有用的信息。 - 如果您的镜像运行非交互式进程(例如 Web 服务器或数据库),则该应用程序可能会将其输出发送到日志文件而不是
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。