在 docker 文件中,如何从 docker 图像中删除目录及其内容? (windows)

In a dockerfile, how to delete a directory and its contents from docker image? (windows)

我正在使用 python:3.6.5-windowsservercore 基本图像。

COPY . /app 将构建上下文复制到 C:\app。这包括构建项目所需的某些密钥。

在 运行 构建之后,我想删除密钥文件夹 (C:\app\keys),为此我使用:

RUN powershell.exe Remove-Item -Path C:\app\keys -Force

注意 - 我还尝试了以下每个替代方案:

RUN Remove-Item -Path C:\app\keys -Force
RUN RD /S /Q C:\app\keys

这给了我以下错误:

Step 10/14 : RUN powershell.exe Remove-Item -Path C:\app\keys -Force
 ---> Running in 4e22124332b1
Remove-Item : Object reference not set to an instance of an object.
At line:1 char:1
+ Remove-Item -Path C:\app\keys -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Remove-Item], NullReferenceEx
   ception
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShe
   ll.Commands.RemoveItemCommand

The command 'powershell -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; powershell.exe Remove-Item -Path C:\app\keys -Force' returned a non-zero code: 1

删除镜像里面目录的方法是什么?

解决方案:

RUN Remove-Item -Path C:\app\keys -Force -Recurse

有两个方面可以解决这个问题。

  1. 根据您的基本图像,您的默认图像是什么 shell? Bash 还是幂shell?在我的例子中是 powershell,所以没有必要在命令的开头提到 powershell.exe。

  2. 原来的命令不正确RUN Remove-Item -Path C:\app\keys -Force,因为该文件夹有子文件夹和文件。所以不得不提-Recurse