【发布时间】:2016-04-29 06:36:19
【问题描述】:
我正在使用 nginx 符号链接方法来链接到 /dev/stdout 来处理我想出现在“docker logs”中的任何日志文件,但这不起作用。
我已经在 /etc/crontab 中使用一个简单的 cronjob 对此进行了测试,如果存在符号链接(指向 /dev/stdout)它不会写任何东西(据我所知),但如果我删除符号链接并写入文件。
另外,如果我回显到 /dev/stdout,它会在命令行中回显,但在“docker logs”中找不到...
问题:这应该有效吗? (它似乎与 nginx 一起工作)。否则,我将如何从“辅助”进程中获取日志以显示在 docker 日志中。
参考:
Nginx Dockerfile 显示符号链接方法:https://github.com/nginxinc/docker-nginx/blob/a8b6da8425c4a41a5dedb1fb52e429232a55ad41/Dockerfile
为此创建了一个官方错误报告:https://github.com/docker/docker/issues/19616
我的 Dockerfile:
FROM ubuntu:trusty
#FROM quay.io/letsencrypt/letsencrypt:latest # For testing
ENV v="Fri Jan 22 10:08:39 EST 2016"
# Setup the cronjob
ADD crontab /etc/crontab
RUN chmod 600 /etc/crontab
# Setup letsencrypt logs
RUN ln -sf /dev/stdout /var/log/letsencrypt.log
# Setup cron logs
RUN ln -sf /dev/stdout /var/log/cron.log
RUN ln -sf /dev/stdout /var/log/syslog
# Setup keepalive script
ADD keepalive.sh /usr/bin/keepalive.sh
RUN chmod +x /usr/bin/keepalive.sh
ENTRYPOINT /usr/bin/keepalive.sh
crontab 文件:
* * * * * root date >> /var/log/letsencrypt.log
keepalive.sh 脚本
#!/bin/bash
# Start cron
rsyslogd
cron
echo "Keepalive script running!"
while true; do
echo 'Sleeping for an hour...'
sleep 10
done
【问题讨论】:
-
...你有什么问题?
-
哈...谢谢你,看看编辑!
-
我已经放弃了在容器中管理日志,而是尝试尽可能多地通过 logstash 向 elasticsearch 提供数据。虽然有一些设置开销,但总体而言它的痛苦要小得多。
-
好的,那么作为替代方案,您对那个设置有任何参考吗?无论如何,我打算集成一个 ELK 堆栈...
-
您的“keepalive.sh”脚本是否运行 cron 守护进程?
标签: logging nginx process docker