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
效果如下,
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐