查看容器日志
`docker logs` 命令显示正在运行的容器记录的信息。`docker service logs` 命令显示参与服务的所有容器记录的信息。记录的信息和日志的格式几乎完全取决于容器的 endpoint 命令。
默认情况下,`docker logs` 或 `docker service logs` 显示命令的输出,就像您在终端中交互式运行命令时那样。Unix 和 Linux 命令通常在运行时打开三个 I/O 流,称为 `STDIN`、`STDOUT` 和 `STDERR`。`STDIN` 是命令的输入流,可能包括来自键盘的输入或来自另一个命令的输入。`STDOUT` 通常是命令的正常输出,而 `STDERR` 通常用于输出错误消息。默认情况下,`docker logs` 显示命令的 `STDOUT` 和 `STDERR`。要详细了解 I/O 和 Linux,请参阅 Linux Documentation Project 关于 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。