我目前已配置以下日志驱动程序/etc/docker/daemon.json
:
{
"log-driver": "journald",
"log-opts": {
"tag": "{{.Name}}"
},
"userland-proxy": false
}
它起作用了,日志被发送到systemd-journald
。
我测试了通过 GELF 从一些容器发送日志,效果也很好:
logging:
driver: "gelf"
options:
gelf-address: "udp://192.168.10.2:12201"
tag: "caddy"
到目前为止,一切都很好。
然后我想做一个全局的改变,让所有容器中的日志都进入日志容器(通过 GELF),所以我/etc/docker/daemon.json
用
{
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://192.168.10.2:12201",
"tag": "{{.Name}}"
},
"userland-proxy": false
}
重新启动后dockerd
没有任何变化:日志转到systemd-journald
并且我在该级别配置的日志docker-compose.yml
通过 GELF 发送。
换句话说,更改/etc/docker/daemon.json
并重新启动dockerd
没有任何效果。我是否遗漏了什么?
dockerd
开始于
root@srv /e/docker# systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Thu 2024-04-18 14:13:13 CEST; 21h ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 869846 (dockerd)
Tasks: 51
Memory: 212.3M (peak: 269.1M)
CPU: 6min 819ms
CGroup: /system.slice/docker.service
└─869846 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
答案1
在 Docker 引擎文档中配置日志驱动程序,有一条注释:
更改守护进程配置中的默认日志记录驱动程序或日志记录驱动程序选项只会影响更改配置后创建的容器。现有容器将保留创建时使用的日志记录驱动程序选项。要更新容器的日志记录驱动程序,必须使用所需选项重新创建容器。
日志记录驱动程序似乎是一个不可变的容器属性,只能通过创建新容器来更改。其中的内容daemon.json
只是新容器的默认设置。
在页面的下方,还有一个命令可用于快速识别容器的当前日志记录驱动程序:
docker inspect -f '{{.HostConfig.LogConfig.Type}}' CONTAINER
如果您有任何现有容器(如所列docker ps -a
),您必须停止、删除然后重新创建它们才能使更改生效。