docker container 会产生很多日志,通常的标准日志( /dev/stdout
, /dev/stderr
),docker 在运行的过程中就会产生很多,它们一般会以如下的方式命名,并写到这些文件里,比如:
/var/lib/docker/containers/[CONTAINER ID]/[CONTAINER_ID]-json.log
所以我们需要开启logrotate功能,否则就等着主机磁盘爆掉了
具体创建 /etc/logrotate.d/docker-container
,添加如下配置文件,当然还可以添加其他一些配置,但下面这个已经够了
/var/lib/docker/containers/*/*.log {
daily
rotate 7
copytruncate
missingok
compress
delaycompress
maxsize 10G
minsize 1024k
}
这样系统的logrotate服务就会自动对它进行rotate了。
效果大概如下所示:
但生产环境,开启logrotate的同时,还需要有自己的日志系统,流行的方案是采用EFK( elasticsearch, fluentd, kibana)
,通过配置 fluentd 进行日志采集 docker 容器日志。具体这里不展开了。
另外docker官方也提供了通过配置 docker daemon 的方法来进行日志roate,类似如下:
{
"storage-driver": "overlay2",
"graph": "/var/lib/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "200m",
"max-file": "7"
},
"debug": false,
"userns-remap": "1000:1000"
}
其中如下的定义就是限制最大日志文件大小,比如每个限制多大,保留最近日志多少个等。
"log-opts": {
"max-size": "200m",
"max-file": "7"
},
会自动以日期作为后缀进行命名:
/var/lib/docker/containers/[CONTAINER ID]/[CONTAINER_ID]-json.log-xxyearxxmonthxxday.gz
效果如下,