多阶段Dockerfile构建COPY程序文件失败-访问被拒绝

Multi-Stage Dockerfile Build Fails to COPY Program Files - Access is denied

我正在创建一个 windows docker 容器,用于执行一些需要安装 SQL Server Command Line Utilities 的管理任务。我的目标是使用多阶段构建来确保 MSI/chocolatey 安装 cruft 不包含在最终图像中。当我执行 docker build 时出现此错误:

Step 8/10 : COPY --from=setup ["C:\Program Files\Microsoft SQL Server" "C:\Program Files\Microsoft SQL Server"]
failed to create hash for Documents and Settings: readlink \?\Volume{b9e10f4e-aa64-4233-a798-28aa8ac73055}\Documents and Settings: Access is denied.

是否可以通过这种方式从Program Files复制文件?如何才能让它发挥作用?

这是我的 Dockerfile:

# Setup container installs chocolatey and sqlserver CLI tools
FROM microsoft/windowsservercore:latest as setup
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN Invoke-WebRequest -OutFile chocoinstall.ps1 "https://chocolatey.org/install.ps1"
RUN . .\chocoinstall.ps1
RUN choco install 'sqlserver-cmdlineutils' -version '13.1' --yes

# Deploy Tools image
FROM microsoft/windowsservercore:latest
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# SQL server CLI tools
COPY --from=setup ["C:\Program Files\Microsoft SQL Server" "C:\Program Files\Microsoft SQL Server"]
RUN $env:PATH = 'C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;' + $env:PATH;

ENTRYPOINT ["powershell"]

一个非常难的问题。但是在 COPY 指令中添加注释“# escape=`”和一个“,”就可以了。

# escape=`
# Setup container installs chocolatey and sqlserver CLI tools
FROM microsoft/windowsservercore:latest as setup
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN Invoke-WebRequest -OutFile chocoinstall.ps1 "https://chocolatey.org/install.ps1"
RUN . .\chocoinstall.ps1
RUN choco install 'sqlserver-cmdlineutils' -version '13.1' --yes

# Deploy Tools image
FROM microsoft/windowsservercore:latest
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

# SQL server CLI tools
COPY --from=setup ["C:\Program Files\Microsoft SQL Server", "C:\Program Files\Microsoft SQL Server"]
RUN $env:PATH = 'C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\;' + $env:PATH;

ENTRYPOINT ["powershell"]

(编辑:删除了 .dockerignore 文件)