确认远程syslog服务就绪后,直接通过--log-driver=syslog及--log-opt指定地址、协议、标签等参数,即可将容器stdout/stderr日志实时发送至rsyslog/syslog-ng等服务,docker原生支持无需额外采集器。

直接在容器启动时指定 syslog 日志驱动,并配置地址和协议,就能把 stdout/stderr 日志实时发往远程 syslog 服务(如 Rsyslog、Syslog-ng 或 Papertrail)。不需要额外安装采集器,Docker 原生支持。
确认远程 syslog 服务已就绪
确保目标服务器监听对应协议和端口,常见组合有:
- UDP 协议:默认端口 514(轻量、无重传,适合内网)
- TCP 协议:推荐端口 601 或自定义(可靠传输,支持 TLS)
- 确保防火墙放行该端口,且 syslog 服务已启用网络接收(例如 Rsyslog 需开启
imudp或imtcp模块)
单容器启动时配置 syslog 驱动
使用 --log-driver=syslog 并通过 --log-opt 指定参数:
- 基础 UDP 示例:
docker run --log-driver=syslog --log-opt syslog-address=udp://192.168.1.10:514 nginx - TCP + 自定义标签(便于识别来源):
docker run --log-driver=syslog --log-opt syslog-address=tcp://logs.example.com:601 --log-opt syslog-tag=demo-app-{{.Name}} nginx - 带 TLS 加密(需服务端支持):
--log-opt syslog-tls-ca-cert=/path/to/ca.pem --log-opt syslog-tls-cert=/path/to/client.crt --log-opt syslog-tls-key=/path/to/client.key
Docker Compose 中统一配置
在 docker-compose.yml 的 service 级别或全局 logging 配置中设置:
services:
api:
image: my-api
logging:
driver: "syslog"
options:
syslog-address: "tcp://10.0.10.5:601"
syslog-tag: "api-{{.Name}}"
syslog-format: "rfc5424"
-
syslog-format可选rfc3164(传统)或rfc5424(结构化、支持结构字段) - 若多个服务共用同一配置,可提至
logging顶层段落,再用driver_opts复用
验证与排错要点
日志是否真正发出,关键看三处:
- 执行
docker inspect <container></container>,检查HostConfig.LogConfig是否正确显示 syslog 配置 - 在远程 syslog 服务器上用
tcpdump -i any port 514或journalctl -u rsyslog -f观察是否有新日志到达 - 注意容器启动顺序:syslog 服务必须先于容器运行;若地址不可达,Docker 默认会静默丢弃日志(不报错),建议搭配
syslog-facility和日志级别做初步过滤











