私はドッカーのプルを行い、ダウンロードした画像を一覧表示できます。この画像の内容を見たいです。ネットで検索しましたが、正解はありませんでした。
私はドッカーのプルを行い、ダウンロードした画像を一覧表示できます。この画像の内容を見たいです。ネットで検索しましたが、正解はありませんでした。
回答:
その画像を使用してインタラクティブなシェルコンテナーを実行し、その画像に含まれるコンテンツを探索できます。
例えば:
docker run -it image_name sh
または、 entrypoint
docker run -it --entrypoint sh image_name
または、イメージがどのように構築されたか、つまりの手順を確認したい場合はDockerfile
、次のことができます。
docker image history --no-trunc image_name > image_history
ステップはimage_history
ファイルに記録されます。
docker run -it --entrypoint cmd <image_name>
と、機能します。
ここで受け入れられた答えは問題です。これは、画像に何らかのインタラクティブシェルが含まれる保証がないためです。例えば、ドローン/ドローンの画像は、単一のコマンドに含まれ/drone
、そしてそれが持っているENTRYPOINT
としても、これは失敗します。
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
そしてこれは失敗します:
$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".
これは珍しい設定ではありません。多くの最小限のイメージには、ターゲットサービスをサポートするために必要なバイナリのみが含まれています。幸い、画像の内容に依存しない画像ファイルシステムを探索するメカニズムがあります。最も簡単なのは、おそらくコンテナファイルシステムをtarアーカイブとしてdocker export
エクスポートするコマンドです。したがって、コンテナーを開始します(失敗するかどうかは関係ありません)。
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
次に、を使用docker export
してファイルシステムをにエクスポートしますtar
。
$ docker export $(docker ps -lq) | tar tf -
docker ps -lq
「私の最も最近のドッキングウィンドウコンテナのIDを与える」が意味しています。これを明示的なコンテナー名またはIDに置き換えることができます。
画像の内容を見るためだけにコンテナを起動するべきではありません。たとえば、悪意のあるコンテンツを探すのではなく、実行したい場合があります。「実行」の代わりに「作成」を使用します。
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
docker export tmp_$$ > image-fs.tar
。
docker export tmp_$$ | tar t
動作しません。
tar
がマシンにインストールされていない可能性があります。tar --help
確認してみてください。
-o
パラメータを使用して、書き込むファイルを指定できます。例えばdocker export -o c:\temp\tmp_$$.tar tmp_$$
。
docker save nginx > nginx.tar
tar -xvf nginx.tar
次のファイルが存在します:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
または
ダイビングを使用して、TUIでインタラクティブに画像コンテンツを表示できます
docker
本質的に異なるタイプのアーカイブファイルの内容を確認する必要があるのでしょうか。
docker save --output nginx.tar nginx:latest
。それ以外の場合、ドキュメントによれば、「すべての親レイヤーとすべてのタグ+バージョン」が含まれます
ls
利用可能であり、PATH
ドッカー画像の探索!
そこにどんな種類のシェルが入っているのbash
か、sh
または...
最初に画像を検査します。 docker inspect name-of-container-or-image
探しentrypoint
やcmd
JSONリターンで。
次に行います: docker run --rm -it --entrypoint=/bin/bash name-of-image
一度doの中に入る:ls -lsa
または次のような他のシェルコマンド:cd ..
-it
インタラクティブ...とtty の略です。--rm
実行後のコンテナの取り外しの略です。
ls
。または、本当に一般的なツールです。
次のように、より簡単な方法を試すことができます。
docker image inspect image_id
これはDockerバージョンで機能しました:
DockerVersion": "18.05.0-ce"
コンテナイメージのスキャンに使用できるAnchoreと呼ばれる無料のオープンソースツールがあります。このコマンドを使用すると、コンテナイメージ内のすべてのファイルを一覧表示できます
anchore-cli画像コンテンツmyrepo / app:latestファイル