2017-11-13 9 views
0

NGINXコンテナを作成しています。すべてのログを既定のボリュームではなく、マウントされたボリュームに書きたい。これは、マウントされたボリュームのフォルダにaccess_logとerror_logを指定してnginx.confファイルを更新することで実現できます。私はそれぞれのコンテナに、マウントされたボリューム内のコンテナ固有のフォルダに書き込むようにしています。例えばのためにDOCKERFILEで変数を操作する方法

: コンテナイメージ名:mycontainerapp マウントされたボリューム:/logdirectory それから私はしたい: /var/log/logdirectory/mycontainerapp/{containerID}/log

にこの道を指すように、私は複数のコンテナが共通のマウントされたボリュームにログインすることができます。

私の知る限りでは、私は、コンテナIDを取得することができますから、/ procの/ 1/cpusetの 私はContainerIDのは、および作成するためにそれを使用することを読み取ることができますどのように私は、

質問があるコンテナのIDを取得する他の方法のわかりませんDOCKERFILEを使用してマウントされたボリューム(フォルダ名付き)?

また、私が達成しようとしていることに対してより良いアプローチがある場合は、私がドッカーの初心者であることを知らせてください。

+0

ホストまたはコンテナからコンテナIDを読み込みますか? 'docker ps'と 'docker inspect'を少なくとも参照してください – user2915097

答えて

0

Dockerには標準ログファイルを除外するlogging mechanismが含まれています。 stdoutstderrに送信されたすべてのデータは、Dockersロギングインターフェイスによってキャプチャされます。

Dockerホストからのログを中央ログサービス(Graylog、Syslog、AWS CloudWatch、ETW、Fluentd、Google Cloud、Splunk)に送ることができるlogging driversの番号があります。 jsonドライバがDockerホストにローカルに保存されているデフォルトです。 journaldも格納され、ローカルにアクセスできます。

nginxの設定ファイル、またはそのことについては任意の容器で

send the access log stdout or /dev/fd/1 and send the error log to stderr or /dev/fd/2

daemon off; 
error_log /dev/fd/2 info; 

http { 
    access_log /dev/fd/1; 
    ... 
} 

あなたはすべてのコンテナにこの概念の適用を開始すると、任意のログ管理要件は、コンテナ/アプリケーションレベルから除去され、に押し上げていますホスト。コンテナmeta data can be attached to logs。ロギングメカニズムの移動や変更が容易になります。 Swarmのようなクラスタ化された設定に移行することは、面倒な作業になりません。これは、Dockerがプッシュする世界のコンテナアイデアごとに1つのプロセスに結びついています。

関連する問題