如何将Docker容器日志转发至主机journald/syslog服务?PostgreSQL配置遇阻
解决Docker PostgreSQL容器日志转发至主机journald的问题
你之前用syslog驱动的方式踩坑了——其实Docker原生就支持直接将容器日志发送到主机的journald服务,不用绕syslog的UDP端口,这样配置更简单也更可靠。
正确的docker-compose配置
把你原来的logging部分替换成下面的内容就行:
postgres: restart: unless-stopped image: postgres:9.6 ports: - "5432:5432" logging: driver: "journald"
配置后验证步骤
- 重启容器让配置生效:
docker-compose down && docker-compose up -d - 用
journalctl实时查看PostgreSQL的日志:# 按容器名过滤 journalctl -f CONTAINER_NAME=postgres_1 # 或者按镜像名过滤 journalctl -f IMAGE=postgres:9.6 - 如果你的系统journald配置了转发到syslog,也可以通过
tail -f /var/log/messages查看日志,不过直接用journalctl是更原生的方式。
为什么之前的配置会报错?
你之前用syslog驱动并指定udp://127.0.0.1:514,大概率是因为主机上的syslog服务(比如rsyslog)没有监听UDP 514端口,或者Docker容器没有权限访问这个端口,导致日志无法发送,所以出现WARNING: no logs are available的提示。而用journald驱动的话,Docker会直接和主机的journald服务交互,不需要额外的端口配置,兼容性更好。
额外注意事项
- 确保你的Docker版本在1.12以上(
journald驱动从这个版本开始支持),可以用docker --version检查。 - 如果容器运行时提示权限问题,一般默认配置下Docker daemon已经有访问journald的权限,若有自定义Docker配置,可以检查
/etc/docker/daemon.json里有没有相关限制。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

