将容器的日志发送到STDOUT和STDERR是docker的默认日志行为。实际上,docker提供了多种日志机制帮助用户从容器中提取日志,这些机制被称为logging driver
docker的默认logging driver是json-file
docker info | grep json-file
如果容器在启动的时候没有特别指明,就会使用这个默认的logging driver
json-file是将日志保存在json文件中,docker负责格式化其内容并输出到STDOUT和STDERR
我们可以在Host的容器目录中找到这个文件,路径为:
除了json-file,docker 还支持多种logging driver。完整列表可以查询官方文档:https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers
none:是disable容器日志功能
awslogs,splunk和gcplogs是第三方日志托管服务
gelf和fluentd是两种开源的日志管理方案
容器启动的时候可以通过--log-driver指定使用的logging driver。如果设置docker默认的logging driver,需要修改docker daemon的启动脚本,指定--log-driver参数,比如:
ExecStart-/usr/bin/dockerd -H fd://--log-driver=syslog --log-opt
每种logging driver都有自己的--log-opt,使用时请参考官方文档