docker-swarm - 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 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 驱动程序应该是正在使用的驱动程序。
推荐阅读
- android - 如何在单个活动上水平排列多个图像
- c# - 加密连接字符串在 asp.net C# 中给出了奇怪的错误
- laravel - 是否可以从 Laravel 控制器执行命令提示符?
- docker - docker daemon 选项 --selinux-enabled 有什么作用
- javascript - 在每个“n”索引之后将元素从一个数组插入到另一个数组
- python - 动态创建 simpy.resource
- dart - AssetImage 未在颤振应用程序中显示图像
- bash - 如何在 foreach 循环中正确使用 sed
- javascript - 使用 java web 服务的屏幕截图
- python - Python优化脚本?