Я использую метод symlinking nginx для ссылки на /dev/stdout для любых файлов журналов, которые я хочу отображать в "журналах докеров", однако это не работает.
Я тестировал это с помощью простой cronjob в /etc/crontab, если присутствует симликс (указывающий на /dev/stdout ), он ничего не пишет (насколько я могу судить), но если я удалю symlink и записывает в файл.
Также, если я эхо в /dev/stdout, он возвращается обратно в командную строку, однако он не найден в "журналах докеров"...
Вопрос: Должна ли эта работа работать? (Кажется, работает с nginx). Else, как я могу получить журналы из "вторичных" процессов, чтобы появляться в журналах докеров.
Для ссылки:
Nginx Dockerfile, показывающий метод symlinking: https://github.com/nginxinc/docker-nginx/blob/a8b6da8425c4a41a5dedb1fb52e429232a55ad41/Dockerfile
Создал официальный отчет об ошибке: https://github.com/docker/docker/issues/19616
My 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 script
#!/bin/bash
# Start cron
rsyslogd
cron
echo "Keepalive script running!"
while true; do
echo 'Sleeping for an hour...'
sleep 10
done