Home » Extract file from docker image?

Extract file from docker image?


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:

The docker create command 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 -d except 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

Without quotes 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:

  1. 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

  2. Get the full table of contents from the output of the docker save command with:

    docker save IMAGE_NAME | tar -tvf –

  3. Find the layer.tar file(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.tar to just show those files)

  4. Extract that layer.tar file 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 –

  5. 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.

Related Solutions

how do i get particular key value from string in swift4

It's JSON array of dictionary you can get all the value of particular key by use map with array like below. let arrayValues = mainArray.map{$0["District_NameEng"] as! String} print (arrayValues) Below is the sample code to parse your json string // I've escaped...

Popup text box in HTML with javascript

Does this meet your requirements? function showPopup() { document.getElementById('2').style.display = "block"; } function syncValueWith2() { document.getElementById('2').value = document.getElementById('1').value; } function syncValueWith1() {...

C++ Fizz Buzz alternative version [closed]

You should be able to do this equally well with either for-loop or while-loop. However, that is not why your program is failing. As mentioned earlier by @EvilTeach, your program is basically accepting input from stdin(via cin) outside the braces({}) in main()...

Output is different than I expected [closed]

shopping_cart = ['apples', 'oranges', 'banana', 'kiwi', 'avocado', 'peaches'] s_list = list(shopping_cart) # shopping_cart is already list so you can ignore it. if 'mango' in s_list: print('Done') else: print('Not Done') i Think this is what you're trying to...

How does one make jsdoc actually output docs?

I have fixed it by not using export infront of classes, instead exporting them at the end of the file. like this: import { Errors } from "../errors.js"; import { Models } from "./models.js"; /** * Several paragraphs of text that explain this class * * @class *...

How can I run a jsp program? [closed]

You need to have a JSP capable web-server or application server. Check Apache Tomcat project. And follow the documentation that phoenix provided. Check this link. It gives more info http://www.jsptut.com/Getfamiliar.jsp The first result of a google search....

Why doesn’t the “extern” keyword work in the same file?

extern int x; tells the compiler: "I will provide you a int x in some other compilation unit". Please expect to find it at link time. So, you need another file: example8b.cpp int x = 0; int y = 0; int z = 0; and you need to link both files in your project. But...

Pygame event handling key events

this answer is partly copied from programarcadegames.com, if you want to make a game with pygame, you should have a look at the courses. [assuming you already have a main loop, if not, start the course mentioned above from scratch:] outside the main loop, set...

C# Creating a Grading Program

You are looking for else if construction: //TODO: out the right thresholds static string GradeMe(int average) { if (average >= 90) // 90+ return "Grade A"; else if (average >= 80) // [80..90) return "Grade B"; else if (average >= 70) // [70..80) return...

How to know the do while loop in C programming [closed]

Well: Hope the following helps you. Unlike for and while loops, which test the loop condition at the top of the loop, the do...while loop in C programming language checks its condition at the bottom of the loop A do...while loop is similar to a while loop,...

What is ambient occlusion?

Ambient occlusion is a method to approximate how bright light should be shining on any specific part of a surface, based on the light and it's environment. This is used to add realism. Wikipedia has a nice paragraph that explains what is done. Ambient occlusion...

Can Anyone tell me how can i solve this Exception [closed]

Arrays are zero-indexed. Let's assume for the sake of argument that k is of length 10. What would happen here?: int x; char ch[]= k.toCharArray(); //Convert String into character char p[]=k.toCharArray(); //Convert String into character x=k.length(); ch is now...