2017-05-02 10 views
0

SQL Server Command Line Utilitiesがインストールされている管理タスクを実行するために使用されるWindowsドッカーコンテナを作成しています。私の目標は、マルチステージビルドを使用して、MSI/chocolateyインストールクルフトが最終イメージに含まれないようにすることです。私はdocker buildを実行すると、私はこのエラーを取得:マルチステージDockerfileビルドでプログラムファイルをコピーできません - アクセスが拒否されました

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"] 

答えて

3

本当に難しい問題。しかし、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"] 

+0

おかげで、@stefan(EDIT .dockerignoreファイルを削除しました)。私のCOPYステートメントでは、ファイルのバージョンで修正された根本的な原因が '、'欠けている可能性があります。これを行うと、 '.dockerignore'ファイルは必要ないように見えます。また、この構文を$ env:PATHが永続的でないように設定してPATH環境変数を設定しなければなりませんでした: 'RUN [Environment] :: SetEnvironmentVariable( 'Path'、$ env:Path + '; C:\ Program Files \ Microsoft SQL Server \ Client SDK \ ODBC \ 130 \ Tools \ Binn \ '、[EnvironmentVariableTarget] :: Machine) 'を実行します。残念ながら、この後もSQLツールは依然として壊れています。レジストリエントリまたは何かが不足している必要があります。 –

+0

はい、そうです。それを動作させるためにいくつかのことを試した後、私はCOPY命令に "、"を追加しました。これは問題を解決するようです。だから私は私の答えで.dockerignoreファイルを削除しました。 –

関連する問題