2017-05-02 7 views
0

SQL Server Command Line Utilities이 필요한 몇 가지 관리 작업을 수행하는 데 사용되는 Windows 도커 컨테이너를 만들고 있습니다. 내 목표는 MSI/chocolatey 설치 cruft가 최종 이미지에 포함되지 않도록 다단계 빌드를 사용하는 것입니다.다중 단계 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에서 파일을 복사 할 수 있습니다 : 나는 docker build을 실행하면이 오류를 얻을? 어떻게하면 이것을 작동시킬 수 있을까요?

# 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

정말 어려운 문제 :

여기 내 Dockerfile입니다. 그러나 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 (을 편집 .dockerignore 파일을 제거). 근본 원인이 내 COPY 문에서 누락 된','이었던 것 같아서 파일의 버전에서도 수정되었습니다. 이 작업을 수행 할 때'.dockerignore' 파일이 필요하지 않은 것으로 보입니다. 또한이 구문을 사용하여 PATH 환경 변수를 $ env로 설정해야했습니다. PATH는 영구적이지 않습니다. \ 클라이언트 SDK \ ODBC \ 130 \ Tools \ Binn \ ', [EnvironmentVariableTarget] :: Machine)'을 선택하십시오. 불행히도,이 모든 후 SQL 도구는 여전히 고장입니다. 누락 된 레지스트리 항목이나 뭔가가 있어야합니다. –

+0

네, 맞습니다. 작업을하기 위해 여러 가지를 시도한 후에 COPY 명령에 ","를 추가하면 문제가 해결되는 것 같습니다. 그래서 나는 내 대답에 .dockerignore 파일을 제거했다. –