将Docker作为systemd服务运行时配置日志输出至journald
解决Docker Compose服务日志无法通过journalctl查看的问题
问题原因
通过systemd运行docker compose up --build时,Docker Compose本身的启动、构建日志会被systemd捕获,但容器日志默认使用Docker的json-file驱动,仅能通过docker logs查看,无法进入journald。
解决方案
方案1:为单个Docker Compose服务配置journald日志驱动
编辑你的docker-compose.yml,在需要日志接入journald的服务节点下添加logging配置:
services: 你的服务名称: # 原有服务配置... logging: driver: "journald"
配置完成后,容器日志会直接发送到journald,可通过以下命令查看:
journalctl CONTAINER_NAME=<容器名称> -f
方案2:全局配置Docker默认使用journald日志驱动
如果希望所有新创建的容器都默认将日志发送到journald,编辑Docker守护进程配置文件/etc/docker/daemon.json(文件不存在则直接创建):
{ "log-driver": "journald" }
保存文件后重启Docker服务:
systemctl restart docker
最后重启你的systemd服务:
systemctl restart anglo1.service
优化systemd服务配置
当前的systemd配置存在参数不合理的地方,建议调整如下,确保服务状态与进程状态一致:
[Service] Type=simple RemainAfterExit=no # 移除原有RemainAfterExit=yes,compose up为前台进程,进程退出服务应同步停止 Restart=always User=root WorkingDirectory=/mnt/DockerJobs/Anglo1 LimitNOFILE=5000000 LogRateLimitIntervalSec=0 Environment="PATH=/bin:/usr/bin:/usr/local/bin" ExecStart=/usr/bin/docker compose up --build ExecStop=/usr/bin/docker compose down # 添加停止命令,确保容器能被正确关停 TimeoutStopSec=120
修改后重新加载systemd配置并重启服务:
systemctl daemon-reload systemctl restart anglo1.service
验证配置
查看服务的启动、构建日志:
journalctl -u anglo1.service -f
查看容器运行日志:
journalctl CONTAINER_NAME=<容器名称> -f
内容的提问来源于stack exchange,提问作者XXX
相关产品推荐
相关产品推荐

