GNU/Linux >> Linux の 問題 >  >> Linux

docker でのコマンド出力のリダイレクト

docker-compose を使用する場合の単なる補足 、あなたも試すことができます:

command: bash -c "script_or_command > /path/to/log/command.log 2>&1"


CMD に JSON リストを指定した場合 Dockerfile で 、シェルでは実行されないため、stdout や stderr リダイレクトなどの通常のシェル関数は機能しません。

ドキュメントから:

<ブロック引用>

exec フォームは JSON 配列として解析されます。つまり、二重引用符を使用する必要があります (" ) 単一引用符で囲まれていない単語を囲む (' ).

シェル形式とは異なり、exec 形式はコマンド シェルを呼び出しません。これは、通常のシェル処理が行われないことを意味します。例:CMD [ "echo", "$HOME" ] $HOME では変数置換を行いません .シェル処理が必要な場合は、シェル形式を使用するか、シェルを直接実行します。例:CMD [ "sh", "-c", "echo", "$HOME" ] .

コマンドが実際に行うことは、index.py を実行することです スクリプトと文字列 "1>server.log" を渡します および "2>server.log" その python スクリプトへのコマンドライン引数として .

代わりに次のいずれかを使用してください (両方とも機能するはずです):

<オール>
  • CMD "python index.py > server.log 2>&1"
  • CMD ["/bin/sh", "-c", "python index.py > server.log 2>&1"]

  • docker run を使用するには シェル パイプラインまたはシェル リダイレクトの下で、run を作成します。 stdin を受け入れ、適切に stdout と stderr に出力するには、次の呪文を使用します:

    docker run -i --log-driver=none -a stdin -a stdout -a stderr ...
    

    例えばalpine を実行するには UNIX コマンド cat を実行します。 封じ込められた環境で:

    echo "This was piped into docker" |
      docker run -i --log-driver=none -a stdin -a stdout -a stderr \
        alpine cat - |
      xargs echo This is coming out of docker: 
    

    発行:

    This is coming out of docker: This was piped into docker
    

    Linux
    1. コマンドまたはシェルスクリプトの出力がStdoutまたはStderrであるかどうかを確認する方法は?

    2. docker コマンドが見つかりません

    3. 出力を文字列に変換する

    1. コマンドの出力をシェル変数に割り当てる方法は?

    2. シェル コマンドの出力の最初の行を取得する

    3. 成功した場合にのみシェル コマンドの出力を非表示にしますか?

    1. コマンドの出力をシェル変数に保存しますか?

    2. シェルで`command`と$(command)を使用してコマンド出力を取得することの違いは何ですか?

    3. 「docker stats」コマンド出力について