直接在启动容器时指定 syslog 日志驱动并配置远端地址即可,无需修改宿主机 syslog 服务;支持 udp/tcp/tls 三种传输方式,需确保远端 syslog 服务开启对应端口并启用远程接收,且容器日志必须输出到 stdout/stderr 才能被捕获。

直接在启动容器时指定 syslog 日志驱动,并配置远端地址即可,不需要改宿主机 syslog 服务本身。
用 docker run 命令发日志到远端 syslog
确保目标 syslog 服务器(如 rsyslog 或 syslog-ng)已开启 UDP/TCP 514 端口并允许接收远程日志。然后运行:
- 发到 UDP 远端(最常用):
docker run --log-driver=syslog --log-opt syslog-address=udp://192.168.1.100:514 --log-opt syslog-tag=myapp nginx - 发到 TCP 远端(更可靠,适合生产):
docker run --log-driver=syslog --log-opt syslog-address=tcp://192.168.1.100:514 --log-opt syslog-tag=myapp nginx - 加 TLS 加密(需 syslog 服务支持):
--log-opt syslog-tls-ca-cert=/path/to/ca.pem --log-opt syslog-tls-cert=/path/to/client.crt
在 docker-compose.yml 中配置
适用于多服务场景,配置清晰且可复用:
- 基础示例(UDP):
services:<br> api:<br> image: my-api<br> logging:<br> driver: "syslog"<br> options:<br> syslog-address: "udp://192.168.1.100:514"<br> syslog-tag: "service.api"
- 推荐加上
syslog-facility分类(如local0),方便 syslog 服务按来源规则路由:syslog-facility: "local0"
远端 syslog 服务要做的配合
Docker 只负责发送,远端需明确启用接收能力:
- rsyslog:确认
/etc/rsyslog.conf或/etc/rsyslog.d/50-remote.conf启用了 UDP/TCP 模块,例如:module(load="imudp")<br>input(type="imudp" port="514")
- syslog-ng:检查
source s_network { udp(ip(0.0.0.0) port(514)); };是否存在并启用 - 建议为 Docker 日志单独建规则,比如按
syslog-tag或facility写入独立文件,避免混入系统日志
验证和排错要点
别只看容器是否启动成功,重点确认日志真到了远端:
- 在远端执行
tcpdump -i any udp port 514 -A看是否有包到达 - 查远端 syslog 的日志接收状态,例如 rsyslog 的
journalctl -u rsyslog -n 50 - 容器内应用输出必须走 stdout/stderr(比如
echo "msg"或printf),重定向到文件的日志不会被 Docker 捕获 - 如果用
none或其他驱动,syslog配置会被忽略











