首页 > 解决方案 > Docker swarm LetsEncrypt nginx 容器写入 /var/log

问题描述

我有一个 docker swarm 跨越 4 个 raspberryPis(1 个经理,3 个工人)。今天,当我在主节点上诊断崩溃并发现在该主机上运行的容器进程正在将它们的日志写入主机上的 /var/log 时,我有点惊讶。

我认为默认情况下(并且我的 swarm 使用此处https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/中的 docker 说明中的默认/基本配置),docker 将其写入记录到 json-log 输出,作为 Docker 在主机上自己的日志记录结构的一部分。我看到的是预期的行为,还是我严重错误配置/误解了什么?

例如,为我的 swarm 运行 nginx 入口节点的letsencrypt 映像正在将其日志写入我的主机上的/var/log/letsencrypt。如果没有我在容器规范中明确安装 /var/log 目录,我不会想到这可能。

似乎正在将这些 certbot 调试日志写入主机上的 /var/log/letsencrypt/letsencrypt.log :

2020-07-19 07:11:46,615:DEBUG:certbot.main:certbot version: 0.31.0
2020-07-19 07:11:46,616:DEBUG:certbot.main:Arguments: ['-q']
2020-07-19 07:11:46,616:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#manual,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2020-07-19 07:11:46,638:DEBUG:certbot.log:Root logging level set at 30
2020-07-19 07:11:46,639:INFO:certbot.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log

这是我的 nginx docker-compose 文件:

version: '3'
services:
  nginx:
    image: linuxserver/letsencrypt
    volumes:
      - /share/data/nginx/:/config
    deploy:
      mode: replicated
      placement:
        constraints:
          - "node.role==manager"
    ports:
      - 80:80
      - 443:443
    environment:
      - PUID=1001
      - PGID=1001
      - URL=mydomain.com
      - SUBDOMAINS=www,mysite1,mysite2
      - VALIDATION=http
      - EMAIL=myemail@myprovider.com
      - TZ=Europe/London
    networks:
      - internal
      - monitoring_front-tier

networks:
  internal:
    external: true
  monitoring_front-tier:
    external: true

标签: docker-swarm

解决方案


您可以检查该容器上配置了哪个日志记录驱动程序:

docker inspect -f '{{.HostConfig.LogConfig.Type}}' <container-id>

根据官方文档,您可以将结果与它的行为方式进行比较:https ://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers

您还可以检查是否选择覆盖json-file/etc/docker/daemon.json 下的默认日志记录驱动程序。如果该文件不存在,则 json-file 驱动程序应该是正在使用的驱动程序。


推荐阅读