Dockerコンテナ内でSyslogを実行する–Project Atomic

最近、コンテナ内でrsyslogdを使用することについて不平を言うDockerに関するバグレポートを受け取りました。

ユーザーはRHEL7コンテナを実行し、rsyslogをインストールし、デーモンを起動してからloggerメッセージを送信しましたが、何も起こりませんでした。

# docker run -it --rm rhel /bin/bash # yum -y install rsyslog # /usr/sbin/rsyslogd # logger "this is a test" 

コンテナ内、またはホストマシン上にメッセージが表示されませんでした。

その後、ユーザーは/dev/logが存在しないことに気付き、loggerがメッセージを書いていた場所でした。 ユーザーはこれがバグだと思っていました。

問題は、RHEL7とFedoraでは、受信メッセージを/dev/logでリッスンするjournaldを使用することでした。 RHEL7とFedoraでは、rsyslogは実際にはデフォルトでAPIを介してジャーナルからメッセージを読み取ります。

しかし、すべてのdockerコンテナがsystemdとjournaldを実行するわけではありません。 (ほとんどはそうではありません)。 Rsyslogdをユーザーが望むように動作させるには、設定ファイルを変更する必要があります, /etc/rsyslogd.conf:

  • /etc/rsyslog.conf$ModLoad imjournalを削除します。
  • $OmitLocalLoggingoffに設定します。
  • $ModLoad imuxsockが存在することを確認します。
  • もコメントアウト:$IMJournalStateFile imjournal.state

これらの変更を行った後、rsyslogdはコンテナ内の/dev/logでリッスンを開始し、ロガーメッセージはrsyslogdによって受け入れられ、コンテナ内の/var/log/messagesに書き込まれます。

ホストロガーに行くためにメッセージをログに記録したい場合は、/dev/logをコンテナにボリュームマウントすることができます。

# docker run -v /dev/log:/dev/log -it --rm rhel /bin/bash # logger "this is a test" 

メッセージはホストのjournalctログに表示され、ホストでrsyslogを実行している場合、メッセージは/var/log/messagesになります。

コメントを残す

メールアドレスが公開されることはありません。