2017-08-30 7 views
2

私はしばらくの間、ドッカーで遊んでいましたが、コンテナ内で動作するサービスのログファイルディレクトリを抽出する際に問題がありました。Dockerコンテナ内のログファイルを非ルートとして抽出しています

私Dockerfileは、次のようになります。

ENV HOME=/software/service 
ENV LOGS=$HOME/logs 
COPY Service.jar $HOME/Service.jar 
WORKDIR HOME 
CMD java -jar Service.jar 

私は彼がすべてのログファイル名にlog.logLOGS内の環境変数を作成し、それを2秒ごとに書き込みされていること、このためのスタブサービスを作成しました。

私が達成したいのは、log.logファイルをドッカーのLinuxホストにバックアップすることです。いくつかは、私がデータを永続化するために2つの人気のあるソリューションに出くわした複数のオプションについて読んだ後:docker run -vオプション

  • データを保持するデータコンテナ

  • を作成したボリュームを使用して

    1. オプション2は助けにはなりません私はLinuxホストマシンのログを見たいのでオプション1を選択しました。

      オプション1の問題は、ログをroot権限で作成していることです。これらのログを削除できるようにrootにログインしてください。誰もがrootユーザーを持っていなくてもログを削除する必要があるときに問題が発生する可能性があります。

      だから私はもう少しを読み、この問題のために、多くの「回避策」を見つけ、1は、ドッキングウィンドウの内側に私の/etc/group/etc/passwdファイルを取り付けたと-uオプションを使用して、他の人がこれに類似していました。

      私の主な質問は、にグループ全体の許可を与えながら、-vオプション付き/なしでログファイルを抽出することです。

      ありがとうございます!

    答えて

    0

    ログをホストに保存するには、何らかのボリューム共有が必要で、「-v」フラグが間違いなく最も簡単です。

    は、アクセス許可の問題を1として、私は2つのオプションを参照してください。あなたは

  • を述べたpasswdファイル/グループbindmounting環境変数として必要なユーザ名とグループIDを渡すと

    1. -uフラグをしてデーモンを実行を作りますドッカーのマシンでは、作成時にファイルをダウンロードします(もちろん、これは常に可能ではありません)。

    私は選択肢1が難しいが、適用するのが最も簡単だと思います。

  • +0

    を、私はコンテナ内のエラーを取得するには、コマンドを使用して、ログディレクトリを作成しようとしているときに許可が拒否されたと言います: 'docker run -ti \ -v/etc/group:/ etc/group:ro -v/etc/passwd:/ etc/passwd:ro \ -u $(id -u $ USER):$ id -g $ USER)\ my-image:lastest' 多分私は何かを忘れましたか? – TalOhana

    +0

    このログディレクトリは何ですか?もちろん、権限のないユーザーでコンテナを実行する場合は、アクセス許可をチェックする必要があります。/tmpにログインしてみてください。例えば、 – whites11

    +0

    ログディレクトリは、/ software/service/logsの下の 'Dockerfile 'に指定されていますが、なぜそれを作成できないはずですか? – TalOhana

    0

    別のオプションは、単にホストにログをコピーしている:私はオプション1をしようとしているとき

    docker cp <container-name>:/software/service/logs . 
    
    +0

    このオプションはあまり適していません。なぜなら、コンテナがクラッシュするとログが失われる可能性があるからです – TalOhana

    関連する問題