记一个错误使用 Docker Logging 的案例

博主竟然都没发现自己已经错误的使用 docker logging 好几年了。

博主习惯用 fluentd 收集容器和应用的日志,类似如下配置:

1
2
3
4
5
logging:
driver: fluentd
options:
fluentd-address: 127.0.0.1:24224
tag: nginx

既然是使用 Docker 那么想当然的就要用 Docker 启动 fluentd 了,同时在使用 docker-compose 编排容器时给所有其他容器添加了 depends_on: - fluentd 配置,以保证其他容器在启动时日志服务已经起来。

本来正常使用是没有问题的,但是当 Docker 服务重启(主机重启或直接重启服务)后,发现即使时添加了 restart:always 的容器也没有自动重启,纷纷停留在 Exit 状态。

通过排查,尝试将 fluentd 直接运行在宿主机上后容器重启正常,问题解决。个人猜测 Docker 在经历重启后并没有按照 docker-compose 的 depends_on 顺序进行重启,而部分重启在尝试重启时发现日志服务不在线固重启失败。

另外 fluentd 的主机安装方式可以参考 Fluentd Installation