You can extract files from an image with the following commands:
docker create $image # returns container ID docker cp $container_id:$source_path $destination_path docker rm $container_id
According to the
docker create documentation, this doesn’t run the container:
docker createcommand creates a writeable container layer over the specified image and prepares it for running the specified command. The container ID is then printed to
STDOUT. This is similar to
docker run -dexcept the container is never started. You can then use the
docker start <container_id>command to start the container at any point.
For reference (my previous answer), a less efficient way of extracting a file from an image is the following:
docker run some_image cat $file_path > $output_path
None of the above worked for me. The complete working command is:
docker run --rm --entrypoint /bin/sh image_name -c "cat /path/filename" > output_filename
cat is passed without filename, so it does not know what to show. Also it is a good idea to delete the container after command is finished.
If storing the full output of
docker save isn’t an option, you could use pipelines to extract just the needed file from it.
Unfortunately, because the output is a “tar of tars”, it can be a slightly iterative process.
What I did when I needed to extract a file just now was:
Determine which version of the image the file you are interested in changed most recently (how you do this probably depends on your image), and the date it was created / saved
Get the full table of contents from the output of the
docker savecommand with:
docker save IMAGE_NAME | tar -tvf –
layer.tarfile(s) in the output of that command that match the date of the image that you determined in step 1. (you can add
| grep layer.tarto just show those files)
layer.tarfile to standard out, and get the table of contents of it:
docker save IMAGE_NAME | tar -xf – -O CHECKSUM_FROM_LIST/layer.tar | tar -tvf –
Verify the file you want is listed, and extract it once you find the name:
docker save IMAGE_NAME | tar -xf – -O CHECKSUM_FROM_LIST/layer.tar | tar -xf – PATH/TO/YOUR/FILE
If there are more than one
layer.tar files matching the date you are looking for in step 2/3, you may need to repeat step 4 for each one of them until you find the right one
Replace the text in capitals in the commands above with the correct image names, checksums and filenames for your case.