多级Dockerfile生成无法复制程序文件-访问被拒绝

多级Dockerfile生成无法复制程序文件-访问被拒绝,docker,dockerfile,docker-for-windows,Docker,Dockerfile,Docker For Windows,我正在创建一个windows docker容器,用于执行一些需要安装的管理任务。我的目标是使用多阶段构建,以确保MSI/Chocolate安装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

我正在创建一个windows docker容器,用于执行一些需要安装的管理任务。我的目标是使用多阶段构建,以确保MSI/Chocolate安装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.
可以用这种方式从
程序文件中复制文件吗?你怎么能让它起作用呢

这是我的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"]

这真是个难题。但是在复制指令中添加注释“#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"]

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

谢谢,@stefan。看起来根本原因可能是我的复制语句中缺少的
,您在文件版本中也修复了该语句。执行此操作时,似乎不需要
.dockrignore
文件。我还必须使用此语法设置PATH env变量,因为设置$env:PATH不是持久的:
RUN[Environment]::SetEnvironmentVariable('PATH',$env:PATH+';C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\,[EnvironmentVariableTarget]::Machine)
。不幸的是,在经历了所有这些之后,sql工具仍然处于崩溃状态。一定是缺少注册表项或什么的。是的,你说得对。在尝试了几件事情之后,我在复制指令中添加了“,”,这似乎解决了问题。因此,我在回答中删除了.dockrignore文件。