コマンド出力やログ出力のフォーマット変更

Docker は Go 言語の templates パッケージ を利用して、所定のコマンドやログドライバーの出力フォーマットを操作できるようにしています。

Docker では、テンプレート項目を操作する基本機能を提供します。 以下では、すべてdocker inspectコマンドを使った例を示します。 ただしこれ以外の CLI コマンドにも--formatフラグは用意されています。 また多くの CLI コマンドリファレンスにて、出力フォーマットをカスタマイズする例を示しています。

メモ

--formatフラグを用いる際には、利用しているシェル環境を考慮する必要があります。 Posix シェルの場合、以下のようなコマンド実行では、シングルクォートで囲むことが必要です。

$ docker inspect --format '{{join .Args " , "}}'

逆に Windows シェル(たとえば PowerShell)の場合、シングルクォートの利用は必要ですが、パラメーター内部ではダブルクォートをエスケープする必要があります。 たとえば以下のとおりです。

$ docker inspect --format '{{join .Args \" , \"}}'

join

joinは文字列のリストを連結して、1つの文字列を生成します。 リスト内では、各項目はセパレーターで区切ります。

$ docker inspect --format '{{join .Args " , "}}' container

table

tableは出力したい項目を指定します。

$ docker image list --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"

json

jsonは項目を json 文字列としてエンコードします。

$ docker inspect --format '{{json .Mounts}}' container

lower

lowerは文字列を小文字化します。

$ docker inspect --format "{{lower .Name}}" container

split

splitは、文字列を分割して、セパレーターによって区切られた文字列リストにします。

$ docker inspect --format '{{split .Image ":"}}'

title

titleは文字列の先頭文字を大文字にします。

$ docker inspect --format "{{title .Name}}" container

upper

upperは文字列を大文字化します。

$ docker inspect --format "{{upper .Name}}" container

println

printlnは各項目を一行ずつ出力します。

$ docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' container

ヒント

どの項目を出力できるかを知るには、以下を実行すれば全項目を JSON 形式で表示できます。

$ docker container ls --format='{{json .}}'
format, formatting, output, templates, log