LoginSignup
10
5

More than 3 years have passed since last update.

Docker Imageからファイルを取り出す

Posted at

要約

イメージから直接は取り出せないので以下のようにコンテナを起動してdocker cpでコピーする

CONTAINER_ID=`docker create $IMAGE_NAME`
docker cp $CONTAINER_ID:$FILEPATH .

背景

バグや仕様調査のためにデプロイしたImage内のソースコードやファイルを取り出したいことがあります。
そのときにどうやればいいかの手順をまとめました。

対象ファイルパスを見つける

対象のファイルやディレクトリのパスがわかっていればよいのですが、そうではない場合は中身を調べて目的のものを見つける必要があります。

シェルを利用して探す

だいたい/bin/bashや/bin/shが入っているはずなのでそれを利用して対話的にファイルを見つけます
docker run --rm -it $IMAGE_NAME /bin/bash

入ってなければDockerfileのベースイメージとして使い、インストールしたイメージを作ってしまうのも手です。

diveでレイヤごとの差分を見て探す

dive を利用することでレイヤごとにファイルツリーを見ることが出来ます。
特定のレイヤで追加されたことがわかっているような場合にはこちらのほうが素早く探せる場合があります。
dive $IMAGE_NAME

diveの使い方は以下の記事が参考になります。
https://qiita.com/t_o_d/items/625ad7a274ca34be3312

対象のファイルをコピーする

イメージからファイルは基本的には直接取り出せないみたいです。
そのため、以下のようにコンテナを起動してdocker cpでコピーすることでファイル・フォルダをコピーできます。

# IMAGE_NAMEに対象のイメージ名、 FILEPATH に対象のファイルのDocker Image内のファイルパスをセット
IMAGE_NAME=me/my_application:1.0.0
FILEPATH=/app/scripts/woker/

CONTAINER_ID=`docker create $IMAGE_NAME`
docker cp $CONTAINER_ID:$FILEPATH .
docker rm $CONTAINER_ID
10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5