Dockerfile: 复制 zip 文件并解压

6

我正在尝试构建一个Windows docker镜像,该镜像将复制我的软件并解压缩它。 我在Windows 10主机上工作。 步骤如下:

  1. 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:\'"

  2. Prepare a zip file called image.zip with some files.

  3. Run command:

    docker build -t test3 .

  4. At this point the image is built. image.zip was copied to the image.

  5. Run the container:

    docker run --rm -it test3 powershell
    
  6. From the container powershell run:

    dir
    

目前,我期望在构建过程中已解压缩的“image.zip”文件的内容会被显示出来。但实际上并没有,只有一个“image.zip”文件。


您在docker run命令行中提供的命令将代替镜像的CMD。您是想要运行该命令以提取归档文件吗? - David Maze
不,我希望文件在BUILD过程中解压缩,而不是在RUN时。我想这就是我想找出的:如何在使用DOCKERFILE时将解压缩文件作为构建过程的一部分。 - yaronkl
4
RUN 在构建镜像时运行;CMD 指定容器启动时应运行的命令。请参阅Dockerfile 中 RUN 和 CMD 的区别 - David Maze
2个回答

7

找到了一种使用.tar文件而非.zip文件和使用"ADD"替代"COPY"的方法:

现在DOCKERFILE看起来像这样:

FROM mcr.microsoft.com/windows/servercore:ltsc2019
ADD test3.tar c:/

ADD 命令用于解压归档文件。

5

确实,ADD指令可以提取存档文件,但不支持所有的格式,例如ADDCOPY指令不支持提取.zip文件,但支持提取.tar文件和其他一些格式。

我建议进行以下操作:

  1. 手动将zip文件从源位置复制到包含Dockerfile的工作目录中
  2. 使用ADD指令将zip文件从源位置复制到目标位置
  3. ADD指令后使用RUN指令来提取zip文件。例如:
ADD <file_name.zip> /<destination> 
RUN unzip <file_name.zip>
  1. 接着编写你的 Dockerfile 指令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接