Dockerfile: copy zip and open it
Solution 1
Found a way to do it using .tar file insead of .zip and using "ADD" instead of "COPY":
The DOCKERFILE. now looks like this:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ADD test3.tar c:/
The ADD command extracts the archive.
Solution 2
that's true ADD instruction extract the archived files but not all formates .. for example ADD
or COPY
instruction does not support extracting .zip
files but .tar
files and some more.
I suggest to do the following:
- copy the zip file from it's source manually to the working directory which contains the
Dockerfile
- use
ADD
instruction to copy the zip file from the source to the destination - user
RUN
instruction afterADD
instruction to extract the zip file. like:
ADD <file_name.zip> /<destination>
RUN unzip <file_name.zip>
- after that continue writing your
Dockerfile
instructions.
yaronkl
Updated on June 04, 2022Comments
-
yaronkl almost 2 years
I am trying to build a Windows docker image which will copy my software to the image and unzip it. I am working on Windows 10 host. The steps are:
Prepare file Dockerfile. with the following lines:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
COPY image.zip c:\image.zip
CMD ["powershell.exe", "Expand-Archive -LiteralPath 'C:\image.zip' -DestinationPath 'c:\'"
Prepare a zip file called image.zip with some files.
Run command:
docker build -t test3 .
At this point the image is built. image.zip was copied to the image.
Run the container:
docker run --rm -it test3 powershell
From the container powershell run:
dir
At this point, I expect to see the content of "image.zip" which has been extracted during the build. But I don't, there is just "image.zip".
-
David Maze over 3 yearsThe command you provide on the
docker run
command line runs instead of the image'sCMD
. Do you mean toRUN
the command to extract the archive? -
yaronkl over 3 yearsNo, I want the file to be unzipped during the BUILD process, not the RUN. I guess this is what I am trying to find out: how to unzip a file as part of the build process using DOCKERFILE.
-
David Maze over 3 years
RUN
does run as part of the build;CMD
specifies the command that should be run when the container is started. See also Difference between RUN and CMD in a Dockerfile.