【问题标题】:Dockerfile: copy zip and open itDockerfile:复制zip并打开它
【发布时间】:2021-03-11 23:28:42
【问题描述】:

我正在尝试构建一个 Windows docker 映像,它将我的软件复制到该映像并解压缩它。 我正在使用 Windows 10 主机。 步骤是:

  1. 准备文件 Dockerfile。使用以下几行:

    来自 mcr.microsoft.com/windows/servercore:ltsc2019

    复制 image.zip c:\image.zip

    CMD ["powershell.exe", "Expand-Archive -LiteralPath 'C:\image.zip' -DestinationPath 'c:\'"

  2. 准备一个名为 image.zip 的 zip 文件,其中包含一些文件。

  3. 运行命令:

    docker build -t test3 .

  4. 此时图像已构建。 image.zip 已复制到图像中。

  5. 运行容器:

    docker run --rm -it test3 powershell
    
  6. 从容器 powershell 运行:

    dir
    

此时,我希望看到在构建过程中提取的“image.zip”的内容。但我没有,只有“image.zip”。

【问题讨论】:

  • 您在docker run 命令行上提供的命令运行而不是图像的CMD。您的意思是RUN 提取档案的命令吗?
  • 不,我希望在构建过程中解压缩文件,而不是在运行过程中。我想这就是我想要找出的:如何在使用 DOCKERFILE 的构建过程中解压缩文件。
  • RUN 确实作为构建的一部分运行; CMD 指定容器启动时应该运行的命令。另请参阅Difference between RUN and CMD in a Dockerfile

标签: docker dockerfile containers unzip


【解决方案1】:

找到了一种使用 .tar 文件而不是 .zip 并使用“ADD”而不是“COPY”的方法:

码头文件。现在看起来像这样:

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

ADD 命令提取档案。

【讨论】:

    【解决方案2】:

    这是真正的 ADD 指令提取存档文件但不是所有的甲酸盐.. 例如 ADDCOPY 指令不支持提取 .zip 文件但 .tar 文件等等。

    我建议执行以下操作:

    1. 将 zip 文件从其源手动复制到包含 Dockerfile 的工作目录
    2. 使用ADD指令将zip文件从源复制到目标
    3. 用户RUN 指令在ADD 指令之后提取zip 文件。 喜欢:
    ADD <file_name.zip> /<destination> 
    RUN unzip <file_name.zip>
    
    1. 之后继续编写您的Dockerfile 说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多