はじめに
docker history コマンドを使うと、外部から提供された Docker イメージがどうやって作られたかが確認できます。ところがイメージレイヤによっては CREATED BY
の項目が長すぎて、途切れてしまう場合があります。(イメージ名 docker:latest
は適宜読み替えてください)
$ docker history docker:latest
IMAGE CREATED CREATED BY SIZE COMMENT
...
<missing> 5 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… #途切れている
...
そこで、次のオプションをつけることで途切れずかつ読みやすく表示することができます。
実行結果
$ docker history --no-trunc --format "{{json .}}" docker:latest
...
{
"Comment": "",
"CreatedAt": "2022-03-11T09:19:42+09:00",
"CreatedBy": "/bin/sh -c #(nop) ENTRYPOINT [\"docker-entrypoint.sh\"]", #途切れなくなった
"CreatedSince": "5 days ago",
"ID": "<missing>",
"Size": "0B"
}
...
調べたことメモ
まずは docker history から --no-trunc
オプションを見つけて試しました。確かに CREATED BY
は途切れなくはなりましたが、最長の CREATED BY
に合わせて表示が間延びされて読みにくくなってしまいます。
$ docker history --no-trunc docker:latest
IMAGE CREATED CREATED BY SIZE COMMENT
...
<missing> 5 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entrypoint.sh"] 0B
...
次に docker history (本家) から --format
オプションが使えそうだと気付きました。
$ docker history --no-trunc --format "{{.CreatedBy}}" docker:latest
...
/bin/sh -c #(nop) ENTRYPOINT ["docker-entrypoint.sh"]
...
ヘッダーが表示されないことでレイアウトが崩れることもなくなり、当初の目的は達成できました。その後 format コマンドとログ出力 を読み進めると、
どのようなデータを表示可能かどうか調べるためには、全ての内容を json として表示します。
とあり、様々なログ表示を加工できることがわかりました。例えば JSON フォーマットですべて表示する場合は次のようにします。
$ docker history --no-trunc --format "{{json .}}" docker:latest | jq .
ここから先の更なるログ表示の加工は jq 側で良い感じにできますね。