Recently I received a bug report on Docker reclaming about using rsyslogd within a container.
o usuário executou um container RHEL7, instalou o rsyslog, iniciou o daemon, e então enviou uma mensagem de logger, e nada aconteceu.
# docker run -it --rm rhel /bin/bash # yum -y install rsyslog # /usr/sbin/rsyslogd # logger "this is a test"
nenhuma mensagem apareceu em /var/log/messages
dentro do recipiente,ou na máquina hospedeira.
o usuário então olhou e percebeu que /dev/log
não existia e foi aqui que logger estava escrevendo a mensagem. O utilizador pensou que isto era um erro.
o problema era que em RHEL7 e Fedora agora usamos journald, que escuta em /dev/log
para mensagens recebidas. Em RHEL7 e Fedora, rsyslog realmente lê mensagens da revista através de sua API por padrão.
But not all docker containers run systemd and journald. (A maioria não). Para que o rsyslogd funcione como o usuário queria, ele teria que modificar o arquivo de configuração, /etc/rsyslogd.conf
:
- in
/etc/rsyslog.conf
remove$ModLoad imjournal
. - Set
$OmitLocalLogging
tooff
. - certifique-se que
$ModLoad imuxsock
está presente. - também comente:
$IMJournalStateFile imjournal.state
.
depois de fazer estas alterações, o rsyslogd começará a ouvir em /dev/log
dentro do recipiente e as mensagens do logger serão aceites pelo rsyslogd e escritas em /var/log/messages
dentro do recipiente.Se quiser registar as mensagens para ir para o registo da máquina, poderá montar o volume /dev/log
no contentor.
# docker run -v /dev/log:/dev/log -it --rm rhel /bin/bash # logger "this is a test"
a mensagem deve aparecer no diário de bordo do hospedeiro, e se você estiver executando o rsyslog no host, a mensagem deve terminar em /var/log/messages
.