2016-08-01 5 views
2

現在、私はdocker runコマンドを使用してCentOSベースのコンテナでコマンドを実行できるENTRYPOINTでイメージを構築するDockerfileを持っています。このコマンドを実行すると、Dockerコンテナが停止して削除されます。CMDを実行した後、Dockerコンテナからホストにログファイルをコピーします。

ただし、実行されるコマンドによってDockerコンテナ内にいくつかのログファイルが生成され、コンテナが終了するとすぐに失われます。これらのファイルを保存するためのベストプラクティスは何ですか(できればホストマシンに保存できるようにするのが望ましい)?

+0

お読みくださいhttps://www.loggly.com/docs/docker-syslog/、 https://www.loggly.com/blog/top-5-docker-logging-methods-to-fit-your-container-deployment-strategy/およびhttps://gist.github.com/afolarin/a2ac14231d9079920864 – user2915097

+1

あなたログファイルが保存されている場所をホストにマウントできます。 – lvthillo

+0

私はlogglyについて少し読んで、それを使うことを検討しています。この@ lorenzvth7を行うことができれば非常に簡単ですが、ドッカーコンテナが開始されるまでログファイルは生成されません(コンテナを起動するとホストにディレクトリをマウントするとログディレクトリは空です) – kshah

答えて

1

これが解決策になることがあります。 という名前のドッキングウィンドウのボリュームを作成します。私はあなたのアプリとうまくいけば匹敵するものを作成したより

docker volume create --name centos-volume 

だからあなたのホスト上の彼のボリュームへのパスは/var/lib/docker/volumes/centos-volume/_data

です。 マイdockerfile(コピー私の容器の中にログを作成するスクリプトを、私はあなたがやったようにドッカラン()でコンテナを起動したとき、私は、スクリプトを起動します。):スクリプトの

FROM centos:7 
RUN mkdir /script 
COPY create-log.sh /script/ 
RUN chmod +x /script/create-log.sh 

内容:(それが作成されますがしたがって、このコマンドは私のコンテナでスクリプトを実行するとの内容をマウント

docker run --rm -ti -v centos-volume:/var/log/anaconda/ my-centos ./script/create-log.sh 

/var/log/anacondaでログファイル)

#!/bin/bash 
touch /var/log/anaconda/my-log.log 
echo "hello world" >> /var/log/anaconda/my-log.log 

私は私のコンテナを起動します私のホストの私のボリュームに私のコンテナの私の/var/log/anacondaフォルダー。

は、私がチェックしたより:

cat /var/lib/docker/volumes/centos-volume/_data/my-log.log 
hello world 

コンテナを再実行した後、2番目のログが表示されます。

docker run --rm -ti -v centos-volume:/var/log/anaconda/ my-centos ./script/create-log.sh 

$ sudo su 
[[email protected] centos]# cat /var/lib/docker/volumes/centos-volume/_data/my-log.log 
hello world 
hello world 
関連する問題